在控制台中进行WIxsharp调试自定义操作

时间:2018-10-18 16:13:21

标签: c# wix windows-installer wixsharp

我有一个可编译为.dll的自定义操作项目,我希望能够逐步执行我的自定义操作,我知道可以将程序包更改为wixsharp.bin,但是这样做并不实用。无论如何,我仍然尝试这种方法,但是没有达到断点。

Wix使用:System.Diagnostics.Debugger.Launch();在调试中启动操作,这似乎不适用于wixsharp,但是预期的结果是我正在尝试实现的目标。

我已经看到debug.assert可以用于调试,并且我也看到了对#if DEBUG #endif的引用,我该如何正确调试?

    [CustomAction]
    public static ActionResult CustomAction(Session session)
    {
        Debug.Assert();
        MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");

        return ActionResult.Success;
    }

2 个答案:

答案 0 :(得分:1)

  

N.B! :我不使用WixSharp,但是以下内容应该是通用的。至少其中一些。

调试自定义操作 :我只是按照此过程操作(因为我通常使用本机代码):

  1. 编译调试二进制文件并包含在软件包中。
  2. 显示来自自定义操作的消息框。
  3. 使用Visual Studio附加到显示对话框的过程。
    • 对于本机非托管代码,您附加到 msiexec.exe ,对于托管代码,您附加到 rundll32.exe 系统上下文用户上下文过程,具体取决于自定义操作的运行方式。
    • 在对话框之后直接在代码中设置一个断点,然后点击它。
    • 只要您的源代码与软件包中的调试二进制文件中的内容(调试符号)匹配,这应该可以工作。

操作方法 Advanced Installer中有一段视频显示了大部分流程:Debug C# Custom Actions。很好。


这个问题最近出现了很多,最近一次出现在this question / answer, section 4中。

installsite.orgDebugging Custom Actions中,有关该主题的内容有些陈旧但内容不错。


我根据您的建议进行了测试,以验证它对于常规的WiX设置是否也适用(#if DEBUG使代码仅适用于调试版本):

#if DEBUG
   System.Diagnostics.Debugger.Launch();
#endif

您提到的另一个命令对我也适用:

Debug.Assert(false);

主要挑战是确保正确的dll版本使其进入MSI。如果您没有看到预期的行为,请尝试使用Orca或其他MSI编辑器工具将要与之一起运行的dll版本(调试或发行版)手动插入MSI中-只是要确保其中有正确的二进制文件。我不知道在WixSharp中如何设置。


供参考 Debugging Custom Actions

C++ debugging

Managed Code(除上述内容之外):


某些链接 (用于保存):

答案 1 :(得分:1)

不太清楚是什么原因引起的,我删除了bin文件夹,然后运行了一个构建,现在看来它可以正常工作。正如{SteinÅsmul所说,System.Diagnostics.Debugger.Launch()确实可以正常工作,它必须包含在#if DEBUG中。内置DEBUG后,运行输出的.msi,当您在安装过程中点击自定义操作时,系统将提示您打开Visual Studio实例。

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

    #if DEBUG
            System.Diagnostics.Debugger.Launch();
    #endif
            MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");

            return ActionResult.Success;
     }