无法使用InstallShield使用RegDBDeletekey删除密钥

时间:2012-12-03 12:42:19

标签: installshield

我是这个InstallShield代码的新手。 我想用

删除密钥
  

RegDBDeleteKey("Nrs_Log");

但是无法删除并且设置正常运行。 任何人都可以建议删除注册表项的任何其他方法。

2 个答案:

答案 0 :(得分:0)

RegDBDeleteKey()失败的原因有很多。您的帖子中没有足够的信息来确定问题,因此我甚至无法在没有更多信息的情况下进行推测。所以这里是如何获取更多信息 - 你需要获得RegDBDeleteKey()调用的返回值,这样你就可以知道发生了什么。
下面的代码获取返回值,将其转换为文本错误,并显示结果。

result = RegDBDeleteKey("Nrs_Log");
if(result < 0) then
   SprintfBox(WARNING, "RegDBDelete...", "Failed to delete registry key.\n Error number: %d \n %s", result, FormatMessage(result) );
endif;

一旦您知道实际错误,您应该能够解决问题,或者谷歌了解更多信息。

答案 1 :(得分:0)

请参阅下面的InstallShield InstallScript,以了解如何删除给定的注册表配置单元。如果在尝试删除注册表项之前检查注册表项是否存在:

function DeleteRegistryKeys(hMSI)
    STRING keyToDelete;
begin
    keyToDelete = "\\SOFTWARE\\MyRegistryHive\\";
    //comment below line if your target root hive is HKEY_CLASSES_ROOT
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); //Set this if you want to change the registry root to HKEY_LOCAL_MACHINE.
    REGDB_OPTIONS = REGDB_OPTION_WOW64_64KEY; //Set this only if you want to search WOW64 hive of HKEY_LOCAL_MACHINE if you've a 32-bit installer running on a 64 bit operating system.

    if (RegDBKeyExist (keyToDelete) > 0) then
        SprintfMsiLog ("registry keys found. Going to delete registry keys");
        if (RegDBDeleteKey (keyToDelete) < 0) then
            SprintfMsiLog ("Failed to delete registry keys.");
        else
            SprintfMsiLog ("Registry keys deleted successfully.");
        endif;
    else
        SprintfMsiLog ("Registry keys not found.");
    endif;
end;