我想第一次使用这个工具,用Inno Setup创建一个安装程序 我要做的是使用更详细的自制安装程序(即Setup.exe中的Setup.exe)包装现有软件的现有安装程序。
到目前为止研究之后对我有用的是要求安装人员(Inno Setup * .exe)运行附带的安装程序(实际软件设置)。
为什么我需要另一个安装程序?因为我想给它一些额外的功能。
特别是:我想在安装结束时添加一个注册表项,作为最后一步,适合相关的位系统(32/64位)。和请问这里是专家帮助的地方。 (主要关注)
我的问题详情如下:
[Registry]
部分添加密钥。但是,[Registry]
似乎总是在[Run]
之前运行 - 但我需要在安装后添加密钥(在安装本身创建的regedit-path中添加),而不是之前,所以我删除了已经工作的内容(只是在错误的顺序中)[Registry]
下。为了在主安装后完成一个reg-add,我发现了两个程序AfterInstall
和CurStepChanged
/ ssPostInstall
以及DeinitializeSetup
,这似乎不适合我的关注(但是考虑AfterInstall
将是我正在寻找的东西(?!),因为如果安装之前已经失败了(?!),那么我认为它不会再运行了,我认为它不会运行。 / LI>
[Registry]
下添加它,但是当谈到[Code]
- 部分时,我觉得有点迷失,即使我现在做了很多关于Inno Setup的研究,给出了函数等等。 IsWin64
)混合起来,即使对我来说也是一个错误的初学者。另外,我尝试创建一个if-else查询,编译器告诉我,我做错了。 AfterInstall
有效,但添加其他内容则无效。 因此理论中的解决方案大致类似......
if IsWin64 then...
很抱歉没有为您提供更多服务。我通常不会编码。
如果相关,那就是我到目前为止在代码部分中所拥有的内容:
procedure MyAfterInstall();
function IsWin64: Boolean;
if 64-bit Reg-Add HKLM\SOFTWARE\Wow6432Node\A
else Reg-Add HKLM\SOFTWARE\B
我使用[Code]
procedure DeinitializeSetup();
begin
RegWriteStringValue(
HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\A', 'ConnectionString ', 'Data Source=Test;');
end;
的原因是因为到目前为止这对我有用,但我知道即使用户在安装任何内容之前退出设置也会调用此函数,这不太好。我在安装后运行它,因为软件安装本身创建了我想要添加密钥的路径,在软件安装失败时使用密钥是没有意义的......也许有更好的方法。登记/>
为许多话道歉,并提前感谢任何帮助。
答案 0 :(得分:2)
要在安装完成后执行代码,请使用CurStepChanged
event function并检查CurStep = ssPostInstall
。
由于Inno Setup是32位应用程序,默认情况下它会自动gets redirected to the Wow6432Node
on 64-bit systems。不需要明确地这样做。因此,如果Wow6432Node
是32位和64位路径之间的唯一区别,则不要做任何特殊的事情:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
Log('Installation finished, writing connection string');
RegWriteStringValue(
HKEY_LOCAL_MACHINE, 'SOFTWARE\A', 'ConnectionString', 'Data Source=Test;');
end;
end;
当然,除非您使用64-bit installation mode。
另请参阅:Writing 32/64-bit specific registry key in Inno Setup。
如果密钥路径确实不同,请使用IsWin64
function:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if IsWin64 then
begin
Log('Installation finished, writing 64-bit connection string');
RegWriteStringValue(
HKEY_LOCAL_MACHINE, 'SOFTWARE\A', 'ConnectionString', 'Data Source=Test;');
end
else
begin
Log('Installation finished, writing 32-bit connection string');
RegWriteStringValue(
HKEY_LOCAL_MACHINE, 'SOFTWARE\B', 'ConnectionString', 'Data Source=Test;');
end;
end;
end;