我有一个自定义操作项目,它编译成一个.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;
}发布于 2018-10-19 12:30:09
不太清楚是什么导致了这个问题,我删除了bin文件夹,然后运行了一个构建,现在它似乎正在工作。System.Diagnostics.Debugger.Launch()确实正确工作,它需要包含在一个#if DEBUG中,正如@Stein所述。一旦内置调试运行输出的.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;
}发布于 2018-10-18 18:04:51
N.B!:我不使用WixSharp,但下面应该是通用的。至少其中的一些。
调试自定义操作:我只是遵循这个过程(因为我通常使用本机代码):
msiexec.exe,托管代码附加到rundll32.exe。系统上下文或用户上下文进程取决于自定义操作的运行方式。入门视频:有一段来自高级安装程序的视频显示了大部分过程:调试C#自定义操作。非常好。
关于如何将C# (托管)自定义操作与WiX一起使用的逐步描述。。
这个问题最近出现了很多,最近出现在本问题/答案,第4节上。
以下是installsite.org:调试自定义操作中关于这个主题的一些老化但很好的内容。
我对您自己的建议进行了测试,以验证它是否也适用于常规的WiX设置( #if调试使代码只适用于调试生成):
#if DEBUG
System.Diagnostics.Debugger.Launch();
#endif您提到的另一个命令也适用于我:
Debug.Assert(false);主要的挑战是确保正确的dll版本使其进入MSI。如果您没有看到预期的行为,请尝试使用Orca或其他MSI编辑器工具手动插入要运行的dll版本(调试或发布)到MSI中--以确保正确的二进制文件在其中。我不知道这是如何在WixSharp中设置的。
消息框:要显示来自C#自定义操作的消息框:
将项目引用添加到System.Windows.Forms命名空间和系统程序集(即项目引用和代码中的使用):
using System.Windows.Forms;
<..>
[CustomAction]
public static ActionResult TestCustomAction(Session session)
{
MessageBox.Show("Hello from TestCustomAction");
return ActionResult.Success;
}除了使用.NET消息框之外,还可以通过:调用以显示对话框使用MSI内置的Win32对话框。这可能对最终用户对话框更好。我只会使用上述方法进行调试。
供参考:调试自定义操作
C++ debugging
Managed Code (除上述之外):
某些链接(用于安全保存):
https://stackoverflow.com/questions/52878332
复制相似问题