c# - 关于自定义操作 Installshield 失败的自定义消息

标签 c# installshield installscript

我有一个在安装时运行的自定义操作,它是一个用 C# 编写的 exe。此 exe 向用户授予对特定文件夹的权限,如果此任务失败,则安装继续没有用处。我需要它回滚,但只有在显示适当的错误消息之后。

现在我尝试的是以下内容

  1. 编辑 exe 以更新注册表中的条目以指示其执行是成功还是失败。
  2. 添加了第二个自定义操作来读取注册表并显示错误消息。这是一个安装脚本。

我的需求

在从注册表中读取失败条目时回滚安装。

我写的脚本

function CheckRegistry(hMSI)    
STRING keyValue;
NUMBER nType, nSize;        

开始

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
if (RegDBGetKeyValueEx ("CSVExtraction", "AccessGranted", nType, keyValue,nSize) < 0) then
    MessageBox ("RegDBGetKeyValueEx failed.", SEVERE);
    abort;
else
    if(keyValue != "true") then
        MessageBox("Granting access to the Installation Folder failed; Hence exiting installation",SEVERE);
        abort;
    endif
endif

结束;

最佳答案

没有办法按照你的要求去做。您可以在返回非零退出代码之前显示来自 EXE 的消息,但 Windows Installer 仍会显示错误 1722 消息。

如果您可以改为从 DLL 运行函数,则您有更多选择。您可以设置属性(假设这是一个即时模式操作),而不是返回错误,并且可以使用这些属性做更多的事情,例如显示另一个对话框,或者在没有错误 1722 消息的情况下退出安装。

来源:Old answer to similar problem

关于c# - 关于自定义操作 Installshield 失败的自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106865/

相关文章:

c# - UserControl 在放置在窗体上时膨胀?

c# - 获取输出数据返回 0

Installshield 64 位项目设置

c# - 让 dotnet core 2.0.0 Socket.Listen() 支持 UNIX Domain Socket?

javascript - Angular post 和 web api C#

wix - 始终在小升级中更新文件(如何)

visual-studio-2012 - 无法在 InstallShield 2012 Limited Edition 中创建非广告快捷方式

windows-installer - 在重大升级期间,如何在 InstallScript 中找到应用程序以前的安装位置?

c++ - 如何将 unicode 字符串/wstring/CStringW 从 C++ dll 返回到 InstallScript?

installation - 单元测试安装脚本