我想用Inno Setup创建一个安装程序,这是我第一次使用此工具。
我想要做的是用更详细的自制安装程序(即Setup.exe中的Setup.exe)封装现有软件的现有安装程序。在Inno Setup安装结束时编写32/64位特定注册表键
在研究到目前为止,我的作品是要求安装程序(Inno Setup * .exe)运行附带的安装程序(实际的软件设置)。
为什么我需要另一个安装程序?因为我想给它一些额外的功能。
特别是:我想在安装结束时添加一个注册表键,作为适合相关位系统(32/64位)的最后一步。这里是我要求专家帮助的地方。 (主要关注)
我的详细问题如下:
- 我设法使用创新安装的
[Registry]
部分增加的关键。然而,[Registry]
似乎总是在[Run]
之前运行 - 但我需要在安装后添加的密钥(添加到安装本身创建的注册表路径中),而不是之前,所以我删除了[Registry]
之前已经工作的(只是顺序错误) 。为了在主安装后完成reg-add,我找到了两个程序AfterInstall
和CurStepChanged
/ssPostInstall
和DeinitializeSetup
,这似乎不适合我的关注(但想到AfterInstall
将是我正在寻找的? ),因为没有更多的应该来之后,我认为它不会运行,如果安装之前已经失败(?!) - 我不知道用于添加注册表键(字符串)的Pascal语法,我可以在
[Registry]
之下添加它,但是当涉及到[Code]
部分时,即使我现在对Inno Setup给出了许多功能等方面的研究,我也感觉有点遗憾。 - 第三个问题是,注册表中的路径会有所不同,具体取决于它是32位还是64位位系统。所以实际上在添加一个或另一个路径/关键字之前(这是因为程序本身的安装根据位版本创建了路径)之前实际上需要额外的查询来检查位系统,所以我发现函数
IsWin64
(布尔值) ,现在试图将一个函数(位版本查询)与一个过程(AfterInstall
)混合起来,即使对我而言,初学者也是错误的。另外我试着创建一个if-else-query,编译器告诉我我做错了。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;
我之所以用DeinitializeSetup
是因为它是一两件事,为我工作,到目前为止,但是我知道这个功能是即使用户在安装任何东西之前退出设置,这也不是很好。我在安装后运行它,因为软件安装本身创建了我想要添加密钥的路径,在软件安装失败时拥有密钥是没有意义的......也许还有更好的方法。
很多道歉,并提前感谢任何帮助。
是不是真的'HKLM \ SOFTWARE \ Wow6432Node \ A' VS'REG-添加HKLM \ SOFTWARE \ B'或者说'注册 - 添加HKLM \ SOFTWARE \ A'?即是唯一的区别'Wow6432Node'还是实际的关键路径结尾也不同? –
@MartinPrikryl你说得对,“Wow6432Node”是唯一的区别。其余的都是一样的,即使我想添加的数据记录对于32位和64位版本都是一样的。 – Yauhun