我是这个 InstallShield 代码的新手。我正在尝试删除一个密钥
RegDBDeleteKey("Nrs_Log");
但无法删除,安装程序运行良好。任何人都可以建议任何其他方式来删除注册表项。
我是这个 InstallShield 代码的新手。我正在尝试删除一个密钥
RegDBDeleteKey("Nrs_Log");
但无法删除,安装程序运行良好。任何人都可以建议任何其他方式来删除注册表项。
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;
一旦您知道实际错误,您应该能够解决问题或谷歌它以获取更多信息。
请参阅下面的 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;