C# 控制台中的WIxsharp调试自定义操作

C# 控制台中的WIxsharp调试自定义操作,c#,wix,windows-installer,wixsharp,C#,Wix,Windows Installer,Wixsharp,我有一个自定义操作项目,它可以编译成.dll,我希望能够逐步完成我的自定义操作,我知道包可以更改为wixsharp.bin,但这并不实用。不管怎样,我仍然尝试了这个方法,但它没有达到我的断点 Wix使用:System.Diagnostics.Debugger.Launch()在调试中启动操作,这似乎不适用于wixsharp,但它的预期结果正是我试图实现的 我已经看到debug.assert可以用于调试,我还看到了对#if debug#endif如何正确调试的引用 [CustomActio

我有一个自定义操作项目,它可以编译成.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;
    }
注意:我不使用WixSharp,但下面的内容应该是通用的。至少有一部分

调试自定义操作:我只需遵循以下过程(因为我通常使用本机代码):

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

    如何播放视频:有一个视频显示了大部分流程:。很好



    这个问题最近经常出现,最近一次是在美国

    以下是一些关于该主题的老旧但好的内容:


    我根据您的建议运行了一个测试,以验证它是否也适用于常规WiX设置(如果调试使代码仅适用于调试版本):

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

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


    消息框:要显示来自C#自定义操作的消息框:

    将项目引用添加到
    System.Windows.Forms
    命名空间和系统程序集(即项目引用和代码中使用):

    使用System.Windows.Forms;
    [海关行动]
    公共静态操作结果TestCustomAction(会话)
    {
    Show(“来自TestCustomAction的您好”);
    返回操作结果。成功;
    }
    

    除了使用.NET消息框之外,您还可以通过以下方式使用MSI的内置Win32对话框:。这对于最终用户对话框可能更好。我将使用上述方法进行调试


    供参考

    C++调试

    托管代码
    (除上述代码外):

    • ,

    某些链接(为了安全起见):


    我不太确定是什么原因导致了问题,我删除了我的bin文件夹,然后运行了一个构建,现在它似乎可以工作了
    System.Diagnostics.Debugger.Launch()
    工作正常,需要将其包含在@SteinÅsmul所述的
    中。内置调试运行Outputte.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;
         }
    

    感谢您的帮助,我将查看您的建议并在找到解决方案后回复。确实,感谢您的解决方案是您需要先删除WixSharp项目的
    bin
    文件夹。
    using System.Windows.Forms;
    
    <..>
    
    [CustomAction]
    public static ActionResult TestCustomAction(Session session)
    {
       MessageBox.Show("Hello from TestCustomAction");
       return ActionResult.Success;
    }
    
       [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;
         }