为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

C#
HUX布斯 2020-02-03 12:44:25

我有一个编译为.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 回答

?
qq_笑_17

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


调试自定义操作:我只需按照以下步骤操作(因为我通常使用本机代码):


编译调试二进制文件并将其包含在软件包中。

显示来自自定义操作的消息框。

使用Visual Studio附加到显示对话框的过程。

您附加到msiexec.exe本机,非托管代码,并附加到rundll32.exe托管代码。系统上下文或用户上下文过程取决于自定义操作的运行方式。

在对话框之后直接在代码中设置一个断点,然后点击它。

只要您的源代码与软件包中调试二进制文件中的内容相匹配(调试符号),此方法就可以工作。

操作方法视频: Advanced Installer提供了一个视频,其中显示了大部分过程:调试C#自定义操作。很好。


这个问题最近出现了很多,最近在这个问题/答案的第4节中。


这是installsite.org上有关该主题的一些老化但很好的内容:调试自定义操作。


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


#if DEBUG

   System.Diagnostics.Debugger.Launch();

#endif

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


Debug.Assert(false);

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


查看完整回答
反对 2020-02-03
?
大话西游666

不太确定是什么引起了问题,我删除了bin文件夹,然后运行了一个构建,现在看来它可以运行了。System.Diagnostics.Debugger.Launch()确实可以正常工作,它必须包含在#if DEBUG@SteinÅsmul所说的内容中。内置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;

     }


查看完整回答
反对 2020-02-03

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信