2011-05-13 1 views
3

을 반환합니다. GetExceptionMessage는 빈 메시지 (콜론 ":"기호 만 포함)를 반환합니다. Inno Setup의 마지막 버전 (5.4.2)이 사용되었습니다.Inno 설치 GetExceptionMessage는 Inno 설치 스크립트에서 빈 메시지

try 
    Log('Create IISNamespace'); 
    // Create IIS namespace object 
    if Length(virtualDirectoryName) > 0 then 
    begin 
    IIS := CreateOleObject('IISNamespace'); 
    Log('Get IIsWebService'); 
    WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc'); 
    Log('Get IIsWebServer'); 
    WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber); 
    Log('Get IIsWebVirtualDir'); 
    WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); 
    Log('Delete IIsWebVirtualDir'); 
    WebRoot.Delete('IIsWebVirtualDir', virtualDirectoryName); 
    WebRoot.SetInfo(); 
    end; 
except 
    MsgBox(ExpandConstant('{cm:IISException,'+ GetExceptionMessage +'}'), 
    mbInformation, mb_Ok); 
    Log('Uninstall IIS 6 exception: ' + GetExceptionMessage); 
end; 

IIsWebVirtualDir을 삭제하는 동안 예외가 발생합니다. 예외 유형 또는 실제 예외 메시지를 가져 오는 방법이 있습니까?

감사합니다. Denis.

+0

Inno와 함께 제공되는 CodeAutomation.iss 샘플을 실행하면'GetExceptionMessage' /'ShowExceptionMessage' return ":"이 깨진 것 같습니다. 이전 버전을 사용해 보시겠습니까? –

+0

또한 5.2.3 버전을 사용해 보았습니다. 결과는 같습니다. 설치 프로그램의 다른 영역에서 예외가 제대로 작동하고 있습니다. 다른 예외 이벤트 중에 메시지가 표시되었습니다. 이 버그는 inno setup에서 OLE/COM 작업과 관련이있을 수 있습니다. –

+0

실행중인 OS는 무엇입니까? –

답변

0

방금 ​​GetExceptionMessage 또는 ShowExceptionMessage이 깨 졌는지 확인하기 위해 다음 예제를 작성했습니다. 나는 Inno setup 5.4.2 Unicode와 Ansi 버전을 모두 사용했다.

[Setup] 
AppName=Test 
AppVersion=1.5 
DefaultDirName={pf}\test 

[Code] 
function InitializeSetup(): Boolean; 
var 
I: Integer; 
begin 
try 
    I := I div 0; // Raise an exception 
except 
     MsgBox(GetExceptionMessage, 
     mbError, MB_OK); 

     ShowExceptionMessage; 
end; 
result := false; 
end; 

또한 CodeAutomation.iss가 실행되어 예상대로 작동했습니다. 알렉스 케이 (Alex K)가 말한 내용과 상반되는 내용이다.

루틴이 작동해야한다는 것을 알았으므로 코드를 가져 와서 다음 설치 테스트 스크립트를 작성하여 실행하고 ISSNamespace를 설치하지 않은 경우 예외를 발생시킵니다.

[Setup] 
AppName=Test 
AppVersion=1.5 
DefaultDirName={pf}\test 
[CustomMessages] 
IISException =ISS Exception " %1 " occured. 

[Code] 

const 
    IISServerName = 'localhost'; 
    IISServerNumber = '1'; 
    IISURL = 'http://127.0.0.1'; 

function InitializeSetup(): Boolean; 
var 
    IIS, WebSite, WebServer, WebRoot, VDir: Variant; 
    virtualDirectoryName : String; 
begin 
virtualDirectoryName := 'test'; 
try 
    Log('Create IISNamespace'); 
    // Create IIS namespace object 
    if Length(virtualDirectoryName) > 0 then 
    begin 
    IIS := CreateOleObject('IISNamespace'); 
    Log('Get IIsWebService'); 
    WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc'); 
    Log('Get IIsWebServer'); 
    WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber); 
    Log('Get IIsWebVirtualDir'); 
    WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); 
    Log('Delete IIsWebVirtualDir'); 
    WebRoot.Delete('IIsWebVirtualDir', virtualDirectoryName); 
    WebRoot.SetInfo(); 
    end; 
except 
MsgBox(ExpandConstant('{cm:IISException,'+ GetExceptionMessage +'}'), 
    mbInformation, mb_Ok); 
    Log('Uninstall IIS 6 exception: ' + GetExceptionMessage); 
end; 
end; 

하지만이 스크립트를 작성하는 과정에서 치명적인 결함을 만들었습니다.

[CustomMesssages] 섹션을 확인하십시오. 메시지에 % 1이 (가 있는지 확인하십시오. 그렇지 않으면 아무 것도 반환되지 않습니다.

+0

예, [CustomMessages] 섹션에서 "IIS Exception : % 1"메시지를 사용합니다. 정말로, 빈 예외는 inno 설정에서 예외 처리 버그처럼 보입니다. –

+0

@Dennis 로그의 예외 메시지도 비어 있습니까? IIS에서 실행중인 OS 및 버전은 그 용도에 따라 다를 수 있습니다. –

+0

예, 로그 메시지는 "IIS 6 예외 제거 :"와 같습니다. OS/IIS 버전 : Windows Server 2003/IIS 6. –