|
Запуск 1cv82.exe со скрытым главным окном | ☑ | ||
---|---|---|---|---|
0
oleg_km
14.01.13
✎
17:14
|
Этот код не всегда запускает 1С со скрытым окном:
обРеестр = ПолучитьCOMОбъект("WINMGMTS:{authenticationLevel=pkt,impersonationLevel=impersonate}!" + "\\.\root\default:StdRegProv"); КаталогПрограммныхФайлов = ""; обРеестр.GetStringValue(2147483650, "SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir", КаталогПрограммныхФайлов); СисИнфо = Новый СистемнаяИнформация; КаталогПрограммныхФайлов = КаталогПрограммныхФайлов + "\1cv82\" + СисИнфо.ВерсияПриложения + "\bin\"; КоманднаяСтрока = """" + КаталогПрограммныхФайлов + "1cv8.exe"" enterprise " + "/IBConnectionString""" + СтрЗаменить(СтрокаСоединенияИнформационнойБазы(), """", """""") + """ " + "/NUser " + "/C""StartApp:Message"" " + "/DisableStartupMessages"; Если НЕ РабочаяБаза() Тогда КоманднаяСтрока = КоманднаяСтрока + " /DEBUG"; // КоманднаяСтрока = КоманднаяСтрока + " /DEBUGGERURL""tcp://esb126:1560"""; // ЗаписатьСобытие(КоманднаяСтрока); КонецЕсли; обЛокатор = Новый COMОбъект("WbemScripting.SWbemLocator"); обЛокатор.Security_.ImpersonationLevel = 3; обСистема = обЛокатор.ConnectServer(".", "root\cimv2"); обПараметры = обСистема.Get("Win32_ProcessStartup"); обНастройка = обПараметры.SpawnInstance_(); обНастройка.ShowWindow = 0; обПроцесс = обСистема.Get("Win32_Process"); ИДПроцессаСервера = 0; Рез = обПроцесс.Create(КоманднаяСтрока, КаталогПрограммныхФайлов, обНастройка, ИДПроцессаСервера); Запуск при помощи CreateProcess и System.Diagnostics.Process так же не приводит к желаемому результату. Главное окно открывается на различных конфигурациях, в т.ч. и пустой. Возможен ли запуск 1С в режиме предприятия со скрытым главным окном по аналогии с OLE Automation? Очень нужно именно просто запуском exe, а не OLE, т.к. если 1С не смогла запуститься (запрет запуска и т.п.) у меня есть Process ID чтобы ее прибить, а при запуске OLE не понятно что прибивать |
|||
1
Maxus43
14.01.13
✎
17:26
|
зачем хоть запускать со скрытым окном то? интересно
|
|||
2
oleg_km
14.01.13
✎
17:53
|
(1) Зачем в Windows вообще предусмотрена такая возможность? В OLE зачем есть свойство Visible?
1) Аналог асинхронности, но чтобы не видел пользователь. 2) С помощью WinAPI повесил значек на трее и 1С обрабатывает меню этого значка, не хочу чтобы мигало 1С при запуске 3) пока еще не придумал... Принимаются советы по делу |
|||
3
le_
14.01.13
✎
18:02
|
(2) Напиши простенький exe, который будет запускать процесс так, как тебе нужно, возвращать PID и т.д. Хоть на VB. Делов на 20 минут.
|
|||
4
icipher
14.01.13
✎
18:03
|
(1) вирус на 1с пишет
|
|||
5
oleg_km
14.01.13
✎
18:08
|
вирусы орефков с Elisy пишут и ничего.
|
|||
6
oleg_km
14.01.13
✎
22:03
|
(3) Я написал, запускаю 1С с опцией запуска Скрыть главное окно, а 1С запускается с открытым окном. Похоже игнорирует опции запуска. Я бы успокоился, но оно ведет себя так не всегда. Иногда скрывает, систему не могу выявить.
|
|||
7
H A D G E H O G s
14.01.13
✎
22:09
|
||||
8
H A D G E H O G s
14.01.13
✎
22:09
|
Параметры:
DWORD dwFlags; WORD wShowWindow; |
|||
9
oleg_km
15.01.13
✎
09:13
|
(8) Я же привел код и написал что CreateProcess тоже пробовал. Вот эти параметры 1С похоже и игнорирует
Параметры: DWORD dwFlags; WORD wShowWindow; |
|||
10
oleg_km
15.01.13
✎
18:18
|
Кому нужно проблема решается хуками, ПередНачаломРаботыСистемы устанавливаем хук на CBT, ПриНачалеРаботыСистемы убираем. В процедуре хука в событии активация окна IsWindowVisible делаем ему ShowWindow(SW_HIDE)
|
|||
11
rs_trade
15.01.13
✎
18:24
|
1) Аналог асинхронности, но чтобы не видел пользователь.
COM, фоновые не годятся? |
|||
12
kuromanlich
15.01.13
✎
18:26
|
(11) "фоновые " - может как раз и делает для файловой?
|
|||
13
oleg_km
15.01.13
✎
21:07
|
(11)(12) можно делать фоновыми, можно делать файловыми. Мне нужно так, как я описал
Кстати, не понимаю, как можно сделать асинхронно с помощью COM? |
|||
14
rs_trade
16.01.13
✎
10:25
|
(13) COM это же отдельный сеанс. Обмены так часто пишут. Из под юзера запускается ком-соединение в нем обмен и шуршит.
|
|||
15
Odavid
16.01.13
✎
10:33
|
(5) точно
|
|||
16
oleg_km
16.01.13
✎
11:37
|
(14) То что COM отдельный сеанс для вызывающего его процесса не делает его асинхронным. Да это отдельное подключение и соответственно отдельная транзакция, да можно запустить от другого пользователя, но где же здесь асинхронность?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |