Inno Setup GetExceptionMessage返回空消息

时间:2011-05-13 13:35:04

标签: exception exception-handling inno-setup iisvdir

Inno Setup脚本中的

GetExceptionMessage返回空消息(它只包含冒号“:”符号)。使用Inno Setup的最新版本(5.4.2)。

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期间发生异常。 有没有办法获得异常类型或真正的异常消息?

谢谢,丹尼斯。

1 个答案:

答案 0 :(得分: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。否则不会返回任何内容。