2011-05-13 220 views
3

GetExceptionMessage返回空消息(它只包含冒號「:」符號)。使用Inno Setup(5.4.2)的最後一個版本。Inno Setup GetExceptionMessage在Inno Setup腳本中返回空消息

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時發生異常。 有什麼辦法獲得異常類型或真正的異常消息?

謝謝,丹尼斯。

+0

如果我運行inno附帶的CodeAutomation.iss示例,那麼'GetExceptionMessage' /'ShowExceptionMessage'返回「:」以便它看起來被破壞;嘗試更舊的版本? – 2011-05-13 13:58:31

+0

我也試過5.2.3版本。結果是一樣的。異常在安裝程序的其他區域中正常工作 - 在其他異常事件期間顯示消息。可能該錯誤與inno setup中的OLE/COM操作有關。 – 2011-05-17 07:26:39

+0

你在運行什麼操作系統? – 2011-05-17 09:56:09

回答

0

我剛剛寫了下面的例子,看看GetExceptionMessageShowExceptionMessage是否壞了。我使用了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異常:%1」消息。真的,空的異常看起來像inno setup中的異常處理錯誤。 – 2011-05-17 07:22:38

+0

@ Dennis異常消息在日誌中也是空白的?你在其上運行什麼操作系統和版本的IIS可能是特定的? – 2011-05-17 10:00:15

+0

是的,日誌消息看起來像「Uninstall IIS 6 exception ...:」。 OS/IIS版本:Windows Server 2003/IIS 6。 – 2011-05-17 15:40:14