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