2008-08-27 8 views
2

여기에서 작업중인 MSI 배포에 문제가 있습니다 (InstallShield 사용). 우리는 백그라운드에서 실행되는 프로그램을 사용자별로 실행해야하며 사용자 개입없이 자동으로 시작해야합니다.MSI가 SYSTEM 컨텍스트에서 EXE를 실행하지 못하도록 막으십시오.

Group Policy Object/Active Directory (GPO/AD) 배포의 경우 응용 프로그램은 사용자가 로그인하기 전에 SYSTEM 컨텍스트에서 시작됩니다. 응용 프로그램은 사용자 당 한 번만 실행할 수 있습니다 , SYSTEM 프로세스가 USER 프로세스를 시작하지 못하게하는 것 같습니다. 즉, PC를 두 번 재부팅해야 소프트웨어를 사용자에게 배포 할 수 있습니다. 어떻게 우리가 이것을 막을 수 있습니까?

은 기본적으로 현재의 흐름은 다음과 같습니다

  1. 설치/설치 배경 응용 프로그램을 죽일 ...
  2. 을 실행 업그레이드 새 파일
  3. 시작 배경 응용 프로그램
  4. 이 게시 된 응용 프로그램 작동

및 대화 형 MSI 설치 - 문제가있는 것만 '할당 된'응용 프로그램입니다. 3 단계는 사용자 컨텍스트가 아닌 SYSTEM 컨텍스트에서 발생합니다. (

이상적으로는 개발 팀이 SYSTEM 컨텍스트에서 실행되는 것을 방지하기 위해 EXE 파일을 패치하는 것이 좋겠지 만 릴리스주기가 멀어지고, 설치자 기반의 임시 해결책을 찾고 있습니다

(설치 스크립트가 잘 모르겠습니다 ...) VBScript은 아마도 사용할 수있는 기본 InstallShield 항목이없는 경우 이동하는 방법 일 것입니다.

답변

5

Windows Installer의 LogonUser 속성을 EXE를 실행하는 작업의 조건으로 사용할 수 있습니다.

+0

바로 아래 코드를 대체하여 최신 릴리스에 추가했습니다. - 매력처럼 작동합니다! 감사합니다 :) – saschabeaumont

+1

당신이 더 자세히 어떻게하는지 설명 할 수 있다면 좋을 것입니다. –

1

AHA! 내가 거기 아는 청소기 해결책이 될했다 ... 내가 작업 한 코드는 다음과 같은 것을 보이기 시작했다 :

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 
1

나는 이러한 목표를 달성하기 위해 Windows 설치 속성에 의존하지 않을 것입니다. 제대로 이해한다면 사용자 당 한 번 EXE 파일을 실행하고 싶을 것입니다. 아마도 사용자 기본값을 설정하는 것일까 요? 사용자가 실제로 로그인 할 때 올바른 컨텍스트에 있음을 보장 할 수있는 유일한 경우입니다. 평균 배포 시나리오에서 요즘 사용되는 가장의 양과 함께 나는 실제 사용자 로그인이 올바른 것으로 신뢰하지 않습니다. 스테이지에서 EXE 파일을 실행합니다.

이 너무 많은 문제의 근원이다 : 레지스트리 등의 기입

마이크로 소프트라는 기능이 있습니다 ... 사용자 지정 권한과 특권 잠금 기능, 터미널 서버 잠금, 가상화 리디렉션, 가장 배포 시스템에 의해 실행, 운영 체제 재 Active Setup은 로그온 할 때 사용자 당 한 번 "runnable something"을 실행할 수 있습니다. 이것은 스크립트에서 실행 파일에 이르기까지 다양합니다. 자세한 내용은 내 대답을 참조하십시오. Updating every profile's registry on Windows Server 2003