2011-01-10 2 views
1

IIS에 추가 기능인 ISAPI DLL이 있습니다. WIX 3.0을 사용하여 설치 프로그램을 빌드합니다.Javascript 사용자 지정 동작 내에서 MSI 세션 상태를 어떻게 관리 할 수 ​​있습니까?

설치 프로그램 프로젝트에서 Javascript로 구현 된 여러 가지 맞춤 작업이 있습니다. 그 중 하나가 설치 시작시 실행되어 실행중인 IIS 웹 사이트를 중지합니다. 다른 하나는 설치가 끝날 때 IIS 웹 사이트를 시작합니다. 이 작업은 올바른 시간에 올바른 조건에서 CA가 실행되도록합니다. 그러나 논리는 순진하다. 이미 (이미 중지 된 경우에도) 처음에는 모든 웹 사이트를 중지하고 마지막에 모든 웹 사이트를 시작합니다 (이전에 중지 된 경우에도). 이것은 분명히 잘못되었습니다.

내가 원하는 것은 어떤 웹 사이트가 처음부터 정지해야하는지에 대한 세션을 추적하고, 마지막에는 해당 웹 사이트를 다시 시작하려고 시도하는 것입니다. CIM 개체의 ServerState property을 사용하면 웹 사이트 상태를 쉽게 알 수 있습니다. 내가 가진 질문은 MSI 세션에이 정보를 어떻게 저장해야합니까?

session Property에 단일 정보를 채우는 것은 쉽지만 각 웹 사이트에 N 개의 정보 집합을 저장하는 가장 좋은 방법은 무엇입니까? 어떤 경우에는 1 개의 웹 사이트, 어떤 경우에는 51 개의 웹 사이트가있을 수 있습니다.

각기 다른 웹 사이트 이름을 사용하여 고유 한 속성 이름을 만들 수 있다고 가정합니다. 그게 최선인지, 가장 효율적이고, 가장 효과적인 방법인지는 모르겠습니다. 또한 MSI Session 속성의 이름에 슬래시를 사용하는 것이 합법적입니까? (웹 사이트 이름에는 슬래시가 있습니다)

제안 사항?

답변

0

간단한 해결책이 있습니다. 나는 뇌가 쇠약 해졌다.

내가 필요로하는 모든 항목은 문자열이었습니다. 실제로는 설치 중에 중단 된 웹 사이트의 이름이었습니다. 방금 Javascript String.join method을 사용하여 단일 문자열을 만들고 세션 변수에 채 웁니다. 이처럼 :

Session.Property("CA_STOPPEDSITES") = sitesThatWereStopped.join(","); 

그런 다음 다른 사용자 지정 작업에 나중에 해당 정보를 검색하기 위해, 나는 쉽게 간단한

var stoppedSites = Session.Property("CA_STOPPEDSITES"); 
if (stoppedSites != null) { 
    var sitesToStart = stoppedSites.split(","); 
    .... 

수행.

+0

데이터를 검색 할 때 "CA_STOPPEDSITES"속성을 사용하기 때문에 다운 voting. 이것은 사용자 지정 작업이 Windows Installer 모범 사례를 위반하는 지연 실행에서 실행되고 있지 않음을 나타냅니다. 사용자 지정 작업 예약 고려 사항을 읽어야합니다. –

+2

링크를 제공해 주셔서 감사합니다. 와! 링크 없음! – Cheeso

0

당신은 체크 아웃 할 수 있습니다

VBScript (and Jscript) MSI CustomActions suck

C++ 또는 C#을 훨씬 더 나은 선택입니다. 응용 프로그램에 이미 프레임 워크에 대한 종속성이있는 경우 설치 프로그램에 종속성을 추가하는 것이 좋은 선택입니다. WiX에는 jscript가 많은 사용자 지정 동작 패턴이있는 DTF (Deployment Tools Foundation)가 있습니다. 그런 다음 웹 사이트 및 실행 상태의 사전을 만들어 단일 속성으로 직렬화 할 수 있습니다. 뒷면에서 컬렉션을 재검토하고 그에 따라 행동 할 수 있습니다.

디버깅 이야기가 DTF에서 훨씬 우수합니다.

+0

나는 그 기사를 체크 아웃했고, 나는 동의하지 않는다. http://stackoverflow.com/questions/471424/wix-tricks-and-tips/1801532#1801532. .NET을 사용할 수 없기 때문에 C#은 나에게 나쁜 선택입니다. 나는 당신의 제안에 참여할 것이다. 나는 javascript join/split 함수를 사용하여 필요한 모든 정보를 단일 속성에 넣을 것이다. 나는 그것이 어떻게되는지 보게 될 것이다. – Cheeso

+0

롭 (Rob)은 그가 무슨 말을하고 있는지 알고 있습니다.개인적으로 나는 스크립트 사용자 지정 작업이 실패한 것을 목격했으며 다시는 수행하지 않습니다. –

+0

나는 동의한다, 나는 결코 C++을 사용하지 않고 커스텀 액션을 위해 가능하다면 그것들을 완전히 피한다. – saschabeaumont

관련 문제