문제

C# 사용자 정의 조치 내에서 설치 후 컴퓨터 재시작을 프롬프트 할 수있는 방법은 무엇입니까?

우리는 설정을 위해 vs 2005의 설정 프로젝트를 사용하고 있으며, 프로그래밍 방식으로 다시 시작하기로 결정해야합니다 (따라서 모든 설치에서 발생하지는 않습니다).

업데이트 : 우리는 먼저 MSI 사용자 정의 액션 시스템에 이미 내장 된 것을 찾고 있습니다. 그것이 존재하지 않는다면, 우리는 어떻게 든 PC를 스스로 다시 시작하는 데 의지 할 수 있지만 그것을 피하고 싶습니다.

업데이트 : ORCA에서 MSI를 편집 할 때 재부팅 = 힘을 설정할 수있는 위치를 알 수 있습니다. 런타임시 C# 사용자 정의 작업 에서이 테이블을 수정할 수 있습니까? 우리는 이것을 매번 다시 시작하도록 설정할 수 있지만, 설정이 성가 시게 할 수 있습니다 (드문 경우에만 다시 시작하면됩니다).

업데이트 : 설정을 시도했습니다.

savedState["REBOOT"] = "Force";

사용자 정의 작업의 설치 () 메소드 내에서 운이 좋지는 않습니다. 그것은 유물처럼 보이지 않습니다.

또한 시도 :

Context.Parameters["REBOOT"] = "Force";

그러나이 컬렉션은 명령 줄 인수가 사용자 정의 작업에 전달된다고 생각합니다.

업데이트 :이 트릭을 작동시키기 위해 ORCA로 MSI를 편집 할 수있는 방법이 있습니까? 기존 파일의 조건에 따라 재부팅을 예약할까요? C# 사용자 정의 작업에서 MSI 속성을 설정하는 방법을 찾지 못했습니다.

업데이트 : AppDomain.processexit 및 AppDomain.DomainUnload에 연결을 시도하고 새 스레드 및 호출 프로세스를 시작했습니다.

도움이 되었습니까?

해결책 2

우리가 이것을 해결할 수있는 유일한 방법은 다음과 같습니다.

a) ORCA로 MSI를 수정하여 모든 설치마다 설치를 다시 시작합니다.

b) wix 또는 설치 Shield로 설정 프로젝트를 다시 실행하십시오.

도움을 주셔서 감사합니다.

다른 팁

MSI Custom Action Schedulereboot를 추가하거나 호출해야합니다. http://msdn.microsoft.com/en-us/library/aa371527(vs.85).aspx 당신의 installexecutesequence에서. MSI 기능 MSIDOACTION을 사용 하여이 작업을 수행 할 수 있습니다. http://msdn.microsoft.com/en-us/library/aa370090(vs.85).aspx 사용자 정의 액션 내부. 이를 예약하는 사용자 지정 조치는 이연된 사용자 지정 조치가 아니라 즉각적인 사용자 정의 조치 여야합니다. 즉, 설치 파일 화 후 예약해야합니다. 또한 사용자 지정 조치가 설정하는 공공 속성의 조건으로 Installexecutesequence에 추가 할 수도 있습니다.

user32.dll에서 Win32 API 함수를 사용하기 전에이 작업을 수행해야했을 때 다음과 같습니다. exitwindowsex ()

Lancesc는 당신에게 답을주었습니다. SchedulerEboot를 실행해야하며, 가장 좋은 방법은 사용자 정의 작업 내부에 설정 한 자신의 사용자 정의 속성에 의해 조절 된 Installexecutesequence에 삽입하는 것입니다.

언급했듯이 Wix는 미래의 유연성을 향한 방법입니다. Wix에는 이제 Windows API 전체를 감싸는 풍부한 .NET 클래스 라이브러리 세트 인 DTF (Deployment Tools Foundation)도 포함되어 있습니다. 이를 사용하여 C#에서 MSI 데이터베이스에 쉽게 액세스하거나 C# 사용자 정의 작업을 작성할 수 있습니다. 바람직한 경우 이것에 대한 자세한 정보를 제공 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top