通过编辑 Install.pas Delphi 单位在 Inno Setup 中重命名 "unins000.exe"
Rename "unins000.exe" in Inno Setup by editing Install.pas Delphi Unit
我想通过修改 Inno Setup Compiler 5.5.9 Unicode
.
的源代码,让我的 Inno 安装脚本创建 uninstaller.exe
文件用于卸载,而不是 unins000.exe
我打开了 Delphi 单元 Install.pas
,其中包含这些代码:
procedure GenerateUninstallInfoFilename;
var
ExistingFiles: array[0..999] of Boolean;
BaseDir: String;
procedure FindFiles;
var
H: THandle;
FindData: TWin32FindData;
S: String;
begin
H := FindFirstFile(PChar(AddBackslash(BaseDir) + 'unins???.*'),
FindData);
if H <> INVALID_HANDLE_VALUE then begin
repeat
S := FindData.cFilename;
if (Length(S) >= 9) and (CompareText(Copy(S, 1, 5), 'unins') = 0) and
CharInSet(S[6], ['0'..'9']) and CharInSet(S[7], ['0'..'9']) and CharInSet(S[8], ['0'..'9']) and
(S[9] = '.') then
ExistingFiles[StrToInt(Copy(S, 6, 3))] := True;
until not FindNextFile(H, FindData);
Windows.FindClose(H);
end;
end;
procedure GenerateFilenames(const I: Integer);
var
BaseFilename: String;
begin
BaseFilename := AddBackslash(BaseDir) + Format('unins%.3d', [I]);
UninstallExeFilename := BaseFilename + '.exe';
UninstallDataFilename := BaseFilename + '.dat';
UninstallMsgFilename := BaseFilename + '.msg';
end;
我想更改此代码以在安装程序保存卸载信息时创建 uninstaller.exe , uninstaller.dat , uninstaller.msg
文件。
因此,如果安装程序在尝试重新安装我的程序而不卸载其任何旧安装时检测到旧的 uninstaller.exe
,安装程序应该检测到旧的 uninstaller.exe
并在没有任何用户确认的情况下覆盖它。
使用的编译器:CodeGear RAD Studio with Delphi 2009 Update 4
.
我想知道我该怎么做 this.I 这样做仅用于测试目的。
将 unins000.exe
重命名为 uninstaller.exe
后,Inno Setup 似乎无法找到卸载日志文件或任何其他错误.........
感谢您的帮助。
我想您至少具备非常基本的编程技能:
在 UninstallExeFilename := BaseFilename + '.exe';
行放置一个断点
使用 IDE 中的 Watch 检查 BaseFilename 变量。
它说什么?
应该是 'uninstaller' 才能满足您的要求。如果不同,他们只需观察 BaseFilename 变量并检查分配给它的值。
将此变量更改为数字的行可以注释掉或修改。
我想通过修改 Inno Setup Compiler 5.5.9 Unicode
.
uninstaller.exe
文件用于卸载,而不是 unins000.exe
我打开了 Delphi 单元 Install.pas
,其中包含这些代码:
procedure GenerateUninstallInfoFilename;
var
ExistingFiles: array[0..999] of Boolean;
BaseDir: String;
procedure FindFiles;
var
H: THandle;
FindData: TWin32FindData;
S: String;
begin
H := FindFirstFile(PChar(AddBackslash(BaseDir) + 'unins???.*'),
FindData);
if H <> INVALID_HANDLE_VALUE then begin
repeat
S := FindData.cFilename;
if (Length(S) >= 9) and (CompareText(Copy(S, 1, 5), 'unins') = 0) and
CharInSet(S[6], ['0'..'9']) and CharInSet(S[7], ['0'..'9']) and CharInSet(S[8], ['0'..'9']) and
(S[9] = '.') then
ExistingFiles[StrToInt(Copy(S, 6, 3))] := True;
until not FindNextFile(H, FindData);
Windows.FindClose(H);
end;
end;
procedure GenerateFilenames(const I: Integer);
var
BaseFilename: String;
begin
BaseFilename := AddBackslash(BaseDir) + Format('unins%.3d', [I]);
UninstallExeFilename := BaseFilename + '.exe';
UninstallDataFilename := BaseFilename + '.dat';
UninstallMsgFilename := BaseFilename + '.msg';
end;
我想更改此代码以在安装程序保存卸载信息时创建 uninstaller.exe , uninstaller.dat , uninstaller.msg
文件。
因此,如果安装程序在尝试重新安装我的程序而不卸载其任何旧安装时检测到旧的 uninstaller.exe
,安装程序应该检测到旧的 uninstaller.exe
并在没有任何用户确认的情况下覆盖它。
使用的编译器:CodeGear RAD Studio with Delphi 2009 Update 4
.
我想知道我该怎么做 this.I 这样做仅用于测试目的。
将 unins000.exe
重命名为 uninstaller.exe
后,Inno Setup 似乎无法找到卸载日志文件或任何其他错误.........
感谢您的帮助。
我想您至少具备非常基本的编程技能:
在 UninstallExeFilename := BaseFilename + '.exe';
行放置一个断点使用 IDE 中的 Watch 检查 BaseFilename 变量。 它说什么?
应该是 'uninstaller' 才能满足您的要求。如果不同,他们只需观察 BaseFilename 变量并检查分配给它的值。
将此变量更改为数字的行可以注释掉或修改。