如果注册表中存在特定密钥,则中止Install Shield安装

时间:2017-11-10 14:10:57

标签: windows-installer installshield installscript installscript-msi

在setup.exe安装期间,如果注册表中存在特定的密钥,我想中止安装。要实现这一点,我在安装盾牌项目中使用自定义操作调用install-script功能。 安装脚本代码是:

function MyFunction(hMSI)
    // To Do:  Declare local variables.
    STRING szKey;
    NUMBER nRootKey;

begin
// Set the root key to HKEY_LOCAL_MACHINE.
    nRootKey = HKEY_LOCAL_MACHINE;

    if (RegDBSetDefaultRoot (nRootKey) < 0) then
        MessageBox ("First call to RegDBSetDefaultRoot failed.", SEVERE);
    else
        MessageBox ("Root key successfully set to HKEY_LOCAL_MACHINE.",
                   INFORMATION);
    endif;

szKey = "SOFTWARE\\Test";

if (RegDBKeyExist (szKey)< 0) then
MessageBox ("Test is not present", SEVERE);
abort;
endif;

if (RegDBKeyExist (szKey)= 1) then
MessageBox ("Test is present", SEVERE);
abort;
endif;

    // To Do:  Write script that will be executed when MyFunction is called.

end;

每次我收到消息“测试不存在”,即使注册表中存在密钥“HKEY_LOCAL_MACHINE \ SOFTWARE \ Test”。

我认为我做了一些错误的脚本或遗漏了一些东西。 请帮忙。

推荐链接: http://helpnet.installshield.com/installshield19helplib/Subsystems/installshield19langref/helplibrary/LangrefRegDBKeyExist_example.htm#Langref_appendixD_3271668955_1023535

https://community.flexerasoftware.com/showthread.php?139026-Check-if-a-registry-key-exists

1 个答案:

答案 0 :(得分:2)

在您的问题中没有100%确认,但我会给出强烈的赔率:

  1. 您正在使用64位Windows安装进行测试,
  2. 您正在使用C:\ Windows \ System32 \ Regedt32.exe或同等版本创建并直观地验证注册表项,并且
  3. 您不知道InstallScript引擎是以32位进程运行的,或者不知道其含义。
  4. 如果这一切都是真的,那么问题是您已经创建了密钥HKEY_LOCAL_MACHINE \ SOFTWARE \ Test,但是您的代码正在检查HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Test,而不是registry redirector。要解决此问题,您应该执行以下操作之一:

    • 在32位视图中测试一个键(例如,启动C:\ Windows \ SysWow64 \ regedt32.exe);这将允许您使用名称HKEY_LOCAL_MACHINE \ SOFTWARE \ Test来表示重定向的位置。
    • 通过在本地更改REGDB_OPTIONS以包含 REGDB_OPTION_WOW64_64KEY ,更改代码以请求注册表的64位视图。指定该标志时,不会重定向InstallScript注册表函数。不要忘记将REGDB_OPTIONS设置回其先前的值。
    • 如果您的项目是基于MSI的,请考虑使用系统搜索并输入19&#34;错误&#34;而是自定义操作

    请注意,如果此密钥是由您控制之外的软件创建的,则需要确保检查正确的位置。这将影响第一或第二颗子弹是否适合您的情况。 (如果密钥完全在您的控制之下,您还应该考虑它是否使用正确的位置,如果不是,则进行更改。)

相关问题