Windows installer 如果注册表中存在特定的注册表项,则中止Install Shield安装
在setup.exe安装过程中,如果注册表中存在特定项,我希望中止安装。为此,我在install shield project中使用自定义操作调用安装脚本函数。 安装脚本代码为:Windows installer 如果注册表中存在特定的注册表项,则中止Install Shield安装,windows-installer,installshield,installscript,installscript-msi,Windows Installer,Installshield,Installscript,Installscript Msi,在setup.exe安装过程中,如果注册表中存在特定项,我希望中止安装。为此,我在install shield project中使用自定义操作调用安装脚本函数。 安装脚本代码为: function MyFunction(hMSI) // To Do: Declare local variables. STRING szKey; NUMBER nRootKey; begin // Set the root key to HKEY_LOCAL_MACHINE. n
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;
函数MyFunction(hMSI)
//要做的事情:声明局部变量。
字符串szKey;
编号nRootKey;
开始
//将根密钥设置为HKEY_LOCAL_机器。
nRootKey=HKEY_本地_机器;
如果(RegDBSetDefaultRoot(nRootKey)<0),则
MessageBox(“首次调用RegDBSetDefaultRoot失败”,严重);
其他的
MessageBox(“根密钥已成功设置为HKEY_LOCAL_机器。”,
信息);
endif;
szKey=“软件\\测试”;
如果(RegDBKeyExist(szKey)<0),则
消息框(“测试不存在”,严重);
中止
endif;
如果(regdbkeyest(szKey)=1),则
消息框(“测试存在”,严重);
中止
endif;
//待办事项:编写调用MyFunction时将执行的脚本。
结束;
每次我收到消息“测试不存在”,即使注册表中存在“HKEY\U LOCAL\U MACHINE\SOFTWARE\Test”项
我想我做错了剧本或者遗漏了什么。
请帮忙
参考链接:
你的问题没有100%得到证实,但我很有可能:
- 在32位视图中测试密钥(例如,启动C:\Windows\SysWow64\regedt32.exe);这将允许您使用名称HKEY_LOCAL_MACHINE\SOFTWARE\Test来表示重定向的位置
- 更改代码以请求注册表的64位视图,方法是在本地更改为包含REGDB\u OPTION\u WOW64\u 64KEY。指定该标志后,不会重定向InstallScript注册表函数。不要忘记将REGDB_选项设置回其先前的值 如果您的项目是基于MSI的,请考虑使用系统搜索并键入19“错误”自定义动作而不是
请注意,如果此密钥是由您无法控制的软件创建的,则需要确保您正在检查正确的位置。这将影响第一颗子弹还是第二颗子弹更适合你的情况。(如果密钥完全在您的控制之下,您还应该考虑它是否使用了正确的位置,如果没有,则进行更改。)我知道有人已经提供了答案,但您尝试实现的功能可以使用RegLocator和LaunchCondition表以本机方式完成。如果键存在,RegLocator可以填充属性。如果该属性存在,LaunchCondition可能会导致安装失败。谢谢Michael..你完全正确…通过使用REGDB_选项,事情得到了解决..由于这样好的解释,很多事情都被清除了