注意!: 我不使用 WixSharp,但下面应该是通用的。至少其中一些。
调试自定义操作:我只是按照这个过程(因为我通常使用本机代码):
- 编译调试二进制文件并包含在包中。
- 显示自定义操作的消息框。
- 使用 Visual Studio 附加到显示对话框的进程。
- 您附加到
msiexec.exe
本机、非托管代码和rundll32.exe
托管代码。系统上下文或用户上下文进程取决于自定义操作的运行方式。
- 在对话框之后直接在代码中设置一个断点并让它被击中。
- 如果您的源代码与包中的调试二进制文件中的内容匹配(调试符号),这应该可以工作。
操作方法视频: Advanced Installer的视频显示了大部分过程:调试 C# 自定义操作。很好。
关于如何将 C#(托管)自定义操作与 WiX 一起使用的分步说明。
这个问题最近出现了很多,最近一次出现在这个问题/答案的第 4 节中。
以下是installsite.org中关于该主题的一些陈旧但很好的内容:调试自定义操作。
我根据您自己的建议进行了测试,以验证它是否也适用于常规 WiX 设置(#if DEBUG 使代码仅适用于调试版本):
#if DEBUG
System.Diagnostics.Debugger.Launch();
#endif
你提到的另一个命令也适用于我:
Debug.Assert(false);
主要挑战是确保正确的 dll 版本进入 MSI。如果您没有看到预期的行为,请尝试使用 Orca 或其他 MSI 编辑器工具手动将您打算运行的 dll 版本(调试或发布)插入到 MSI 中 - 只是为了确保其中存在正确的二进制文件。我不知道这是如何在 WixSharp 中设置的。
消息框:显示来自 C# 自定义操作的消息框:
添加对System.Windows.Forms
命名空间和系统程序集的项目引用(即项目引用和代码中的 using):
using System.Windows.Forms;
<..>
[CustomAction]
public static ActionResult TestCustomAction(Session session)
{
MessageBox.Show("Hello from TestCustomAction");
return ActionResult.Success;
}
除了使用 .NET 消息框外,您还可以通过以下方式使用 MSI 的内置 Win32 对话框:Session.Message
调用以显示对话框。这对于最终用户对话可能更好。我只会将上述方法用于调试。
供参考:调试自定义操作
C++ debugging
:
Managed Code
(除上述之外):
一些链接(用于保管):