Вопрос

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

Проблема в том, Объект групповой политики/Активный каталог (GPO/AD) приложение запускается в контексте СИСТЕМЫ до того, как кто-либо войдет в систему, а не от имени пользователя, который собирается войти в систему.Приложение может запускаться только один раз для каждого пользователя, и кажется, что процесс СИСТЕМА предотвращает запуск процесса ПОЛЬЗОВАТЕЛЬ.Это означает, что компьютеры необходимо дважды перезагрузить, прежде чем программное обеспечение можно будет развернуть пользователям.Как нам остановить это?

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

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

Это работает для опубликованных приложений и интерактивных МСИ установки - проблемы возникают только с «назначенными» приложениями.Поскольку шаг 3 происходит в контексте СИСТЕМЫ, а не в контексте пользователя :(

В идеале я бы попросил команду разработчиков исправить EXE-файл, чтобы предотвратить запуск в контексте СИСТЕМЫ, но это еще один цикл выпуска, и я ищу временное решение на основе установщика.

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

Это было полезно?

Решение

Вы можете использовать Пользователь входа в систему свойство установщика Windows как условие действия, запускающего EXE.

Другие советы

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

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

У Microsoft есть функция под названием Active Setup, которая позволит вам запускать «что-то работоспособное» один раз для каждого пользователя при входе в систему.Это может быть что угодно: от сценария до исполняемого файла.Более подробную информацию смотрите в моем ответе здесь: Обновление реестра каждого профиля в Windows Server 2003

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

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top