Имя: Пароль:
1C
1С v8
Запуск 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 отдельный сеанс для вызывающего его процесса не делает его асинхронным. Да это отдельное подключение и соответственно отдельная транзакция, да можно запустить от другого пользователя, но где же здесь асинхронность?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.