Сведения о вопросе

HEIGTH

13:25, 16th August, 2020

Остановка MSI от запуска EXE в контексте SYSTEM

Просмотров: 433   Ответов: 3

У меня здесь проблема с MSI deployment, над которой я работаю (используя InstallShield ). У нас есть программа, работающая в фоновом режиме, которая должна выполняться для каждого пользователя, и она должна запускаться автоматически без вмешательства пользователя.

Проблема заключается в том, что объект групповой политики / Active Directory (GPO/AD) deployment приложение запускается в контексте SYSTEM до входа в систему, а не как пользователь, который собирается войти в систему. Приложение может выполняться только один раз на пользователя, и кажется, что процесс SYSTEM предотвращает запуск процесса USER. Это означает, что PCs необходимо перезагрузить дважды, прежде чем программное обеспечение может быть развернуто для пользователей. Как нам остановить это?

В основном текущий рабочий процесс является:

  1. Установки/обновления... убить фоновое приложение
  2. Установка новых файлов
  3. Запуск фонового приложения

Это работает для опубликованных приложений и интерактивных установок MSI - это только 'assigned' приложений, которые, кажется, имеют проблему. Как Шаг 3 происходит в контексте SYSTEM, а не в контексте пользователя :(

В идеале, я бы попросил команду разработчиков исправить файл EXE, чтобы предотвратить запуск в контексте SYSTEM, но это цикл выпуска, и я ищу решение на основе установщика для промежуточного периода.

(Я не знаю Installscript... Поэтому я предполагаю, что VBScript -это, вероятно, путь, если нет родного материала InstallShield, который я могу использовать.)



  Сведения об ответе

LAST

13:21, 21st August, 2020

Вы можете использовать свойство LogonUser установщика Windows в качестве условия для запуска действия EXE.


  Сведения об ответе

DAAA

20:02, 6th August, 2020

Я бы не стал полагаться на свойство Windows installer для достижения этой цели. Если я правильно понимаю, вы хотите запустить файл EXE один раз для каждого пользователя - вероятно, для настройки пользовательских настроек по умолчанию? Единственный раз, когда вы можете гарантировать, что находитесь в правильном контексте, - это когда пользователь действительно входит в систему. Учитывая количество олицетворений, происходящих в эти дни в среднем сценарии deployment, я просто не доверяю ничему, кроме реального входа пользователя в качестве правильного этапа для запуска файлов EXE.

Существует слишком много источников проблем: блокировка пользовательских разрешений и привилегий, блокировка сервера terminal, перенаправление виртуализации, олицетворение, выполняемое системой deployment,переопределение операционной системы для записи реестра и т. д...

Microsoft имеет функцию под названием Active Setup, которая позволит вам запускать "something runnable" один раз для каждого пользователя при входе в систему. Это может быть что угодно-от скрипта до исполняемого файла. Смотрите мой ответ здесь для получения более подробной информации: обновление каждого реестра profile's на сервере Windows Server 2003


  Сведения об ответе

lourence

20:47, 21st August, 2020

Ага! Я знал, что должно быть более чистое решение... код, над которым я работал, начинал выглядеть примерно так:

On Error Resume Next 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'BackgroundProcess.exe'")
For Each objProcess in colProcessList
    colProperties = objProcess.GetOwner(strNameOfUser,strUserDomain)
    If strNameOfUser = "SYSTEM" Then    
        objProcess.Terminate()
    End If
Next


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться