c# - WiX 安装程序在静默和 "normal"模式下启动相同的自定义操作

标签 c# wix windows-installer

我需要创建一个设置来启动一个配置一些 SQL 内容的自定义操作。

这是我的序列:

<InstallExecuteSequence>
  <Custom Action='StartCustomAction' After='InstallFinalize'>NOT Installed</Custom>
</InstallExecuteSequence>

这里我调用我的自定义操作:

<Fragment>
  <Binary Id="CustomActionBinary" SourceFile="$(var.InfPro.dotigaRuntimeSetup.CustomActions.TargetDir)$(var.InfPro.dotigaRuntimeSetup.CustomActions.TargetName).CA.dll"/>
  <CustomAction Id="StartCustomAction" BinaryKey="CustomActionBinary" DllEntry="ShowInitialForm" Execute="immediate" Return="check"/>
</Fragment>

这是我的自定义操作:

[CustomAction]
public static ActionResult ShowInitialForm(Session session)
{

   int i = Convert.ToInt32(session["UILevel"]);
   if (i == 2)
   {
       StreamWriter file = new StreamWriter("c:\test.txt");
       file.WriteLine("Test");

       file.Close();
        }
   else { 
       InitialForm f = new InitialForm();
       if (f.ShowDialog() == DialogResult.Cancel)
          return ActionResult.UserExit;
       }
       return ActionResult.Success; 
}

重要的部分是 if block 。出于测试目的,我想创建一个文件并在安装程序静默执行时在其中写入“测试”。 根据 Microsoft 的说法,UILevel 属性应为 2。https://msdn.microsoft.com/en-us/library/windows/desktop/aa372096(v=vs.85).aspx

不幸的是什么都没有发生。我什至不知道自定义操作是否被调用。

我访问了http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html并看到您可以在自定义操作标记中使用 DllEntry="WixSilentExec"但据我所知,DLL 条目是您的自定义操作方法的名称。在我的例子中是 ShowInitialForm。

感谢您的帮助。 ;)

最佳答案

感谢您的所有帮助,但解决方案以完全不同的方式进行。我使用以下命令在安静模式下调用我的设置:

msiexec /i mySetup.msi /l*v myLog.log 

日志长 1700 行,我偶然发现导致安装失败的错误是错误 1925,这意味着“您没有足够的权限为机器的所有用户完成此安装。以管理员身份登录然后重试此安装。”

所以我通过命令行以管理员身份启动了设置,一切正常。

关于c# - WiX 安装程序在静默和 "normal"模式下启动相同的自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38795520/

相关文章:

c# - 字典和 SelectMany()

c# - 处理位图图像的通用列表

wix - 安装证书作为 WiX 包的一部分

c# - 验证服务是否标记为删除

PowerShell 远程处理 未安装 MSI

C# 将图像加载到 PictureBox 中而不减慢 UI

c# - 如何读取FoxPro启动文件数据文件(文件扩展名.FPM)

c# - 如何使用可以根据用户系统更改的 wix 创建快捷方式

c# - WIX:如何在卸载时显示复选框,如果选择该复选框,将触发自定义操作?

windows-installer - 如何让 msiexec 根据需要安装和/或重新安装