WiX Engine은 프로세스가 관리자로 실행 중이며 실제로 MSI를 설치하는 데 사용되는 보조 프로세스를 실행하는 것으로 나타납니다. 그래서 실제로 같은 이름으로 실행되는 두 개의 프로세스가 있습니다.
CustomB 코드가 Engine.Apply()를 호출하면 비 관리자 프로세스에서 동일한 동작을 볼 수 있습니다. 이는 일반적으로 Engine이 실제 MSI 설치를 처리하기 위해 상승 된 두 번째 프로세스를 실행하기 때문에 사용자가 UAC 프롬프트를 볼 때 발생합니다.
주 프로세스가 이미 admin으로 실행 중이므로 두 번째 프로세스를 회전하여 UAC 프롬프트가 표시되지 않으므로 Engine.Apply() 호출을 기다리지 않고 즉시 엔진을 시작합니다.
참고 : 주 업그레이드를 수행하는 경우 업그레이드 도중 이전 버전의 제거가 자동 모드에서 실행되므로 추가 프로세스가 발생합니다. 이미 실행중인 다른 프로세스 (업그레이드 프로세스)가 있더라도 제거 프로세스가 실행되도록 허용해야합니다.
한 가지 방법은 검사를 할 뮤텍스를 사용할 수 있지만 DisplayMode를 Display.Full에서 실행하는 경우 다음과 같습니다 자세한 답변
if (DisplayMode == Display.Full)
{
bool mutexCreated = false;
mutex = new Mutex(true, @"My Installer F1096BB9-CFDF-4AD1-91D8-9AA8805784A8", out mutexCreated);
if (!mutexCreated)
{
MessageBox.Show("Another instance of the installer is already running. You may only run one at a time.",
"Installer already running", MessageBoxButton.OK,
MessageBoxImage.Warning);
Log("Installer already running");
Exit(ActionResult.NotExecuted);
}
}
public void Exit(ActionResult actionResult)
{
if (mutex != null)
{
mutex.Close();
mutex = null;
}
Log(string.Format("Exiting with code {0}", actionResult));
Engine.Quit((int) actionResult);
}
감사합니다. 설치 프로그램에서 단일 인스턴스 검사를 생략하기로 결정했습니다. –