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