Почему не выполняется "КомандаСистемы"?

Форум 1С: Одинэс.Ру

Найти!

Почему не выполняется "КомандаСистемы"?

US1C
01.06.2009 - 09:01
Ситуация следующая:
В теле процедуры идет выполнение следующей команды -
КомандаСистемы("C:\Program Files\1Cv77\BIN\certutil.exe" -f -user -addstore AddressBook D:\1C_Base\Реквизиты\ExtForms\Cert\7704.cer)
(это установка сертификата)
И ничего не происходит, т.е. сертификат не появляется в хранилище.
Но стоит мне эту строку скопировать в командный шел и она выполняется на раз.
Не пойму, чего не хватает этой команде для полного счастья?
К списку тем 1 > К списку форумов

Интересные темы

odines.ru
02.12.2020 - 18:57
Смотри также:
Объединение печатных форм
непонятная ошибка при входе в 1С
пароль на обработку!

Re: Почему не выполняется "КомандаСистемы"?

Uho
1 - 01.06.2009 - 09:06
Параметры:
<СтрокаКоманды> - строка, содержащая команду.

Re: Почему не выполняется "КомандаСистемы"?

Duke1C
2 - 01.06.2009 - 09:07
А с кавычками у тебя всё в порядке?

Re: Почему не выполняется "КомандаСистемы"?

US1C
3 - 01.06.2009 - 09:12
(1) У меня как раз строка, содержащая команду передается.
(2) С кавычками все впорядке, ибо копируя все из вышеуказанной команды от ( и до ) - я вставляю в коммандную строку и происходит то, что должно произойти.

Re: Почему не выполняется "КомандаСистемы"?

Дятeл
4 - 01.06.2009 - 09:17
КомандаСистемы("C:\Progra~1\1Cv77\BIN\certutil.exe -f -user -addstore AddressBook D:\1C_Base\Реквизиты\ExtForms\Cert\7704.cer")

Re: Почему не выполняется "КомандаСистемы"?

VZ
5 - 01.06.2009 - 09:25
С кавычками все впорядке - вот самомнения бы поменьше...
 
"""C:\Program Files\1Cv77\BIN\certutil.exe"" -f -user -addstore
AddressBook D:\1C_Base\Реквизиты\ExtForms\Cert\7704.cer"

Интересные темы

odines.ru
02.12.2020 - 18:57
Смотри также:
ПУБ: есть ли правила для ввода сивола слэш?
Срочно нужен консультант по 1С _77 Бухгалтерия бюджетного предприятия
Подскажите, плиз, код или ВК, который(ая) фиксирует время простоя 1С-ины и запускает определенную обработку

Re: Почему не выполняется "КомандаСистемы"?

Uho
6 - 01.06.2009 - 09:26
У меня как раз строка, содержащая команду передается.
 
ну-ну...

Re: Почему не выполняется "КомандаСистемы"?

US1C
7 - 01.06.2009 - 09:31
(4) Такая же фигня. В процедуре эта команда не выполняется, копирую в командную строку - отрабатывает как миленькая.

Re: Почему не выполняется "КомандаСистемы"?

US1C
8 - 01.06.2009 - 09:41
(5) Да, в принципе, самомнение уже ниже плинтуса опустилось.
А правильность расставления кавычек проверял следующим образом,
Вот моя процедура:
 
Процедура УстановитьСертификат()
certutil   = """"+КаталогПрограммы()+"certutil.exe""";      
ИмяФайла   = СокрЛП(Примечание);
Каталог    = КаталогИБ()+"ExtForms\"+СокрЛП(Константа.КаталогСертификатовИФНС);
сертификат = Каталог+ИмяФайла;
УстановитьСертификат = certutil+" -f -user -addstore AddressBook "+сертификат;
КомандаСистемы(УстановитьСертификат);
Сообщить(УстановитьСертификат);
Сообщить("Установлен сертификат ИФНС.");
КонецПроцедуры
 
Соответственно строку, которая передавалась КомандеСистемы, я копировал из строки сообщения и вставлял в командный шел. Отлаживал кавычки до тех пор пока она там не стала выполняться. Но КомандаСистемы эту же строку не хочет выполнять.
 
(6) Выше я объяснил, как генерил строку команды. А в сабже уже привел результирующую строку, передаваемую КомандеСистемы.

Re: Почему не выполняется "КомандаСистемы"?

Дятeл
9 - 01.06.2009 - 09:43
Реквизиты сделай нерусскими букавками

Re: Почему не выполняется "КомандаСистемы"?

US1C
10 - 01.06.2009 - 09:59
(9) Не сработало. Теперь в строке команды нет ни одной русской букавки:
"C:\Program Files\1Cv77\BIN\certutil.exe" -f -user -addstore AddressBook D:\1C_Base\Cert\7700.cer
Все равно не хочет выполнять. А командная строка принимает ее на ура. Почему?

Re: Почему не выполняется "КомандаСистемы"?

DaCAT
11 - 01.06.2009 - 10:14
А если попробовать задать-таки текущий каталог в команде? Или попробовать использовать ЗапуститьПриложение.

Re: Почему не выполняется "КомандаСистемы"?

cfgcfg
12 - 01.06.2009 - 10:24
(0) Может тебе батник выполнить? Т.е. написать коммандный файл *.bat , туда эту строку, и выполнять этот батник?
Ковычки также бывают нескольких сортов такие ' , такие ` . Они все по-разному интерпретируются.
Записать в батник это batnik.bat
C:\Program Files\1Cv77\BIN\certutil.exe -f -user -addstore AddressBook D:\1C_Base\Cert\7700.cer
и выполни его.
КомандаСистемы("batnik.bat");

Re: Почему не выполняется "КомандаСистемы"?

VZ
13 - 01.06.2009 - 10:37
(8) Хм....
КомандаСистемы запускает указанное приложение в фоновом режиме. Т.е., вполне даже можно не обнаружить результат выполнения, сканируя результирующий каталог после применения КомандаСистемы() - еще банально нет результата ...
Если хочешь запускать на исполнение какую-нить утилиту с проверкой исполнения ее, лучше привлечь WSH и команду run с параметром WaitOnReturn - тогда твое приложение приостановится до исполнения  команды run. И тогда можешь посмотреть, есть ли нужный файл в нужном директории.
Примечание: если будешь готовить начинку для run из 1С, то так же пользуйся конструкциями типа certutil   = """"+КаталогПрограммы()+"certutil.exe""";

Re: Почему не выполняется "КомандаСистемы"?

VZ
14 - 01.06.2009 - 10:41
12-cfgcfg > Ты сам-то пробовал так писать? В этом случае батник скажет тебе матные слова на тему C:\Program - плохой путь ;)
Кавычки и в батнике нужны. Советчик...

Re: Почему не выполняется "КомандаСистемы"?

cfgcfg
15 - 01.06.2009 - 10:48
(14) Много разговариваешь не по делу.
Процедура ВыполнитьКнопку()
КомандаСистемы("c:\5\1.bat");
КонецПроцедуры
 
состав c:\5\1.bat
copy c:\5\1.txt c:\5\2.txt
 
Прекрасно работает.

Re: Почему не выполняется "КомандаСистемы"?

VZ
16 - 01.06.2009 - 10:48
+13 можно и без wsh, но тогда надо задействоваить внутри КомандаСистемы start с параметром wait

Re: Почему не выполняется "КомандаСистемы"?

VZ
17 - 01.06.2009 - 10:52
15-cfgcfg > Блондинко?

Re: Почему не выполняется "КомандаСистемы"?

Uho
18 - 01.06.2009 - 11:03
(15) Прекрасно работает
а (12) работать НЕ будет

Re: Почему не выполняется "КомандаСистемы"?

cfgcfg
19 - 01.06.2009 - 11:06
(18) Там название каталога с пробелом, поэтому кавычки в самом батнике нужно поставить.

Re: Почему не выполняется "КомандаСистемы"?

chief accountant
20 - 01.06.2009 - 11:06
(17) VZ cfgcfg не понял(а) (14). Поэтому соглашусь с (17)

Re: Почему не выполняется "КомандаСистемы"?

Uho
21 - 01.06.2009 - 11:27
(19) это тебе в (14) и сказали

Re: Почему не выполняется "КомандаСистемы"?

drums2004
22 - 01.06.2009 - 11:35
VZ - ты кажной дырке гвоздь (R)

Re: Почему не выполняется "КомандаСистемы"?

US1C
23 - 01.06.2009 - 11:40
(11) ЗапуститьПриложение отрабатывает с таким же (не) успехом.
(13) То, что оно выполняется в фоновом режиме, это понятно и мне, собственно не нужно фиксировать сам факт выполнения. Мне нужен результат - установленный сертификат в хранилище "Другие пользователи". Т.е. выполняю команду из 1С - сертификат не появляется, копирую строку с командой в шел - сертификат появляется.
Через WSH еще не пробовал, наверное это единственно реальный путь для установки сертификата из 1С.

Re: Почему не выполняется "КомандаСистемы"?

US1C
24 - 01.06.2009 - 11:46
Всем спасибо! Получилось через WSH.

Re: Почему не выполняется "КомандаСистемы"?

VZ
25 - 01.06.2009 - 11:59
Ладно, дам еще наставление по доброте душевной ;))
КомандаСистемы() - не единственный метод в 1С (я счаз про "семерку"), который проглатывает сообщения винды о результате выполнения метода. Т.е. запустишь приложения - и фиг из 1С узнаешь, как оно исполнилось, или почему не исполнилось. И не поможет Попытка - 1С просто не выловит ошибку исполнения...
Такой же облом может посетить, например, при использовании метода ФС.КопироватьФайл().
 
Вот как с этим можно побороться, используя WSH:
ScriptControl = createobject("MSScriptControl.ScriptControl");
ScriptControl.language="vbscript";
стр="function CopyMyFile()
|On Error Resume Next
|Set FSO = CreateObject(""Scripting.FileSystemObject"")
|FSO.CopyFile """+ПолныйПутьОткуда+ИмяФайла+""","""+ПолныйПутьКуда+ИмяФайла+""", 1
|if Err.Number = 0 then
| CopyMyFile = """"
|Else
| CopyMyFile = err.Description
|end if
|end function";
 
рез=ScriptControl.run("CopyMyFile");
Если ПустаяСтрока(рез)=0 Тогда
сообщить("Не удалось скопировать "+ИмяФайла+". Ошибка "+рез);
//что то исполняем
КонецЕсли;
 
Что мы здесь используем? А мы задействуем перехват ошибки выполнения самой винды. То, что из 1С "штатно" сделать не выйдет.
Соответствующего примера с эмуляцией КомандаСистемы предлагаю сотворить самостоятельно :)

Re: Почему не выполняется "КомандаСистемы"?

US1C
26 - 01.06.2009 - 12:13
(25) Я пока использовал WSH для копирования и архивирования (через WinRAR), но ошибку не отлавливал. Пока проблем не было, но если что буду использовать предложенный перехват ошибок. Спасибо.
К списку тем 1 > К списку форумов
Тема закрыта и находится в архиве.
Но Вы можете начать новую тему.
« При удаление строки из табличной части дока Комплекс защиты конфигураций 1C 7.7 «Кольчуга» »
© 2009 Форум 1С: Одинэс.Ру