Inno Setup GetExceptionMessage возвращает пустое сообщение - PullRequest
3 голосов
/ 13 мая 2011

в скрипте 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 голосов
/ 14 мая 2011

Я только что написал следующий пример, чтобы посмотреть, не сломаны ли 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, который поставляется, и он работал как положено. Что противоречит комментарию Алекса К. о том, что он может быть сломан.

Теперь, когда я знаю, что подпрограммы должны работать, я взял ваш код, выполнил следующий тестовый скрипт установки и запустил его, и возникла исключительная ситуация, когда я не нашел 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. В противном случае ничего не возвращается.

...