2011-08-08 5 views
1

설치 후 사용자에게 컴퓨터를 다시 시작하라는 설치 관리자가 있습니다. 이 경우 사용자가 컴퓨터를 다시 시작하지 않고 Windows Vista 이상에서 제공되는 RestartManager API를 사용하여 explorer.exe를 다시 시작하면됩니다.RestartManager를 사용하여 Windows Installer 사용자 지정 동작으로 explorer.exe를 다시 시작하려면 어떻게합니까?

설치하는 동안 로컬 컴퓨터에 복사되어 실행되는 별도의 실행 파일을 만들어 실행했습니다. 별도의 실행 파일은 explorer.exe를 등록하고 종료 한 다음이 코드 (http://msdn.microsoft.com/en-us/library/aa373681%28v=VS.85%29.aspx)를 기반으로 다시 시작합니다. 실행 파일이 설치 프로그램과 별도로 실행되면 설계된대로 작동합니다. 그러나 InstalShield로 만든 MSI 패키지의 일부로 사용자 지정 작업으로 실행하면 explorer.exe는 종료되지만 다시 시작하지는 않습니다.

설치 프로그램과 함께 실행될 때 항상 RmRestart에 대해 160 오류 코드가 표시됩니다. 문서는 잘못된 인수가 제공되었다는 의미의 오류 코드라고합니다. (http://msdn.microsoft.com/en-us/library/aa373665%28v=vs.85%29.aspx). 실행 파일이 Windows Installer와 별도로 실행될 때 작업하면서 잘못된 인수가 아니라는 점은 상당히 긍정적입니다.

나는이 시점에서 붙어있어이 작업을 수행하기 위해 무엇을해야할지 모르겠다. 내가 확실하지 않은 유일한 것은 "0"이 오류 코드 0 (성공) 인 RmStartSession()에서 반환 된 적절한 세션 핸들이 될 수 있는지 여부입니다. 이것이 잘못되었다고 가정하면 실행 파일을 설정하여 InstallValidate 이전에 Windows Installer가 만든 RmSessionKey를 가져옵니다. 그리고 그것을 실행 파일을 지연된 동작으로 호출하는 데 사용합니다. 이 경우 RmShutdown에 대해 4c3의 오류가 발생합니다. 잘못된 오류 코드 인 것 같습니다.

절벽 : RestartManager API를 사용하는 별도의 .exe를 사용하여 종료하고 Windows Installer로 실행하지 않을 때 작동하는 explorer.exe를 다시 시작합니다. 그러나 결합하면 중단됩니다. RmRestart()에 대한 오류 코드 160이 표시됩니다. 이 아이디어를 얻으려는 시도에서 벗어나십시오. 사람들이 원하는 경우 코드 스 니펫을 제공 할 수 있습니다 ...

의견이나 제안에 감사드립니다. 오히려 explorer.exe를 등록하고 종료 별도의 실행 파일을 만들기보다는 MSI DLL 사용자 지정 작업을 만들

답변

1

나는이에 대한 해결책에 도달 결국 .... 이 모든 DLL에는 explorer.exe를 등록하여 Windows Installer (기본적으로)가 제공하는 기존의 다시 시작 관리자 세션을 사용하도록 등록하는 단일 함수가 있어야합니다. 그런 다음 설치 관리자에서 MsiFilesInUse 대화 상자를 추가하면 도움이됩니다.

이제 설치 프로그램이 실행되면 다시 시작 관리자 세션이 시작되고 MSI DLL CA가 호출되고 explorer.exe가 목록에 추가됩니다. 목록이 표시되고 사용자에게 응용 프로그램을 닫거나 연기 할 수있는 옵션이 제공됩니다.

이 방법을 사용하면 무의미한 실행 파일을 사용자에게 배포하지 않아도되고 코드 작성 횟수를 크게 줄일 수 있습니다.