3

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

谢谢,丹尼斯。

4

1 回答 1

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。否则不返回任何内容。

于 2011-05-14T15:13:35.270 回答