我想用Inno Setup创建一个安装程序,这是我第一次使用此工具。
我想做的是将现有软件的现有安装程序与更详细的自制安装程序一起包装(意味着Setup.exe中的Setup.exe)。
经过到目前为止的研究,对我有用的是要求安装程序(Inno Setup * .exe)运行附带的安装程序(实际软件安装程序)。
为什么需要包裹另一个安装程序?因为我想给它一些额外的功能。
特殊的事情是:我想在安装结束时添加一个注册表项,作为最后一步,适合于相关的位系统(32/64位)。这是我要寻求专家帮助的地方。(主要关注)
我的问题详细如下:
[Registry]
Inno Setup部分添加了密钥。但是,它[Registry]
似乎总是在运行之前[Run]
–但是我需要在安装后添加密钥(在安装本身创建的regedit路径中添加),而不是之前添加的密钥,因此我删除了下已经起作用的文件(只是顺序错误)[Registry]
。为了在主安装后完成reg-add,我找到了两个过程AfterInstall
和CurStepChanged
/ ssPostInstall
,DeinitializeSetup
这似乎与我的关注不太吻合(但是考虑AfterInstall
到我正在寻找的是(?!),因为仅此而已。如果安装之前已经失败(?!),应该会之后,我认为它不会运行。[Registry]
,但是当涉及到[Code]
-section时,即使到现在我对有关给定功能的Inno Setup进行了大量研究,我仍然感到有些失落。IsWin64
(布尔),现在,AfterInstall
即使对于初学者来说,尝试将函数(bit-version-query)与过程()混在一起听起来也是如此。另外,我尝试创建一个if-else-query,编译器告诉我我做错了。if IsWin64 then...
可以,但是添加else则无效。因此,理论上的解决方案大致类似于...
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;
我之所以使用DeinitializeSetup
它,是因为到目前为止这是对我有用的一件事,但是我知道即使用户在安装任何东西之前退出安装程序,该函数都将被调用,这并不是很好。我在安装后运行此程序,因为软件安装本身会创建我想要添加密钥的路径,在软件安装失败时拥有密钥是没有意义的……也许对此也有更好的方法。
抱歉,很多话,并预先感谢您的帮助。
要在安装完成后执行代码,请使用CurStepChanged
事件功能并检查CurStep = ssPostInstall
。
由于Inno Setup是32位应用程序,因此默认情况下会自动将其重定向到Wow6432Node
64位系统上。无需明确地执行此操作。因此,如果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位安装模式。
另请参阅:在Inno Setup中编写特定于32/64位的注册表项。
如果密钥路径确实不同,请使用以下IsWin64
函数:
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句