gpt4 book ai didi

registry - 在 Inno Setup 安装结束时写入 32/64 位特定注册表项

转载 作者:行者123 更新时间:2023-12-03 23:19:19 27 4
gpt4 key购买 nike

我想用 Inno Setup 创建一个安装程序,这是我第一次使用这个工具。
我想要做的是用更详细的自制安装程序包装现有软件的现有安装程序(意思是在 Setup.exe 中包含一个 Setup.exe)。

到目前为止研究后对我有用的是要求安装程序(Inno Setup *.exe)运行包含的安装程序(实际软件设置)。
为什么我需要另一个安装程序?因为我想给它一些额外的功能。

特别是: 我想在安装结束时添加一个注册表项,作为最后一步,适合相关的位系统(32/64 位)。 这里是我请专家帮助的地方。 (主要关注点)

我的问题详细如下:

  • 我设法使用 Inno Setup 的 [Registry] 部分添加了 key 。但是,[Registry] 似乎总是在 [Run] 之前运行 - 但我需要在安装后添加 key (在安装本身创建的 regedit 路径中添加),而不是之前,所以我删除了 [Registry] 下已经工作的内容(只是顺序错误) .为了在主安装后完成注册添加,我发现两个程序 AfterInstallCurStepChanged/ssPostInstallDeinitializeSetup 似乎不太适合我的关注(但想 AfterInstall 会是什么? ) 因为之后不会再有任何事情发生,而且我认为它不会运行,如果之前的安装已经失败 (?!)。
  • 我不知道在现有路径下添加注册表项(字符串)的 Pascal 语法。我可以将它添加到 [Registry] 下,但是当涉及到 [Code] 部分时,即使我现在对 Inno Setup 给定的函数等做了很多研究,我也觉得有点迷茫。
  • 第三个问题是注册表中的路径不同,这取决于它是 32 位系统还是 64 位系统。所以我实际上需要一个额外的查询,在添加一个或另一个路径/键之前检查位系统(因为程序的安装本身已经根据位版本创建了路径),我找到了函数 IsWin64( bool ) ,现在尝试将函数(位版本查询)与过程(AfterInstall)混合听起来甚至对我作为初学者来说也是错误的。另外,我尝试创建一个 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 的原因是因为到目前为止它对我有用,但是我知道即使用户在安装任何东西之前退出安装程序也会调用这个函数,这不太好。我在安装后运行它是因为软件安装本身创建了我想要添加 key 的路径,在软件安装失败时拥有 key 是没有意义的......也许还有更好的方法。
    为很多话道歉,并在此先感谢您的帮助。

    最佳答案

    要在安装完成后执行代码,请使用 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 .

    如果 key 路径确实不同,请使用 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;

    关于registry - 在 Inno Setup 安装结束时写入 32/64 位特定注册表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677819/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com