Tos*_*Net 5 c# installation custom-action wix .net-core
如果未安装 NetCore 3.1(预览版),我想取消安装
我创建这个 CustomAction :
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;
namespace WixCustomAction
{
public class CustomActions
{
[CustomAction]
public static ActionResult CheckDotNetCore31Installed(Session session)
{
session.Log("Begin CheckDotNetCore31Installed");
RegistryKey lKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost");
var version = (string)lKey.GetValue("Version");
session["DOTNETCORE31"] = version == "3.1.0-preview3.19553.2" ? "1" : "0";
return ActionResult.Success;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 WXS 文件中:
<<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Product ...>
(...)
<Property Id="DOTNETCORE31">0</Property>
<Condition Message="You must first install the .NET Core 3.1 Runtime">
Installed OR DOTNETCORE31="1"
</Condition>
<InstallExecuteSequence>
<Custom Action="Check.NetCore" Before="LaunchConditions">NOT Installed</Custom>
</InstallExecuteSequence>
</Product>
<Fragment>
<Binary Id="WixCA.dll" SourceFile="$(var.WixCustomAction.TargetDir)$(var.WixCustomAction.TargetName).CA.dll" />
<CustomAction Id="Check.NetCore" BinaryKey="WixCA.dll" DllEntry="CheckDotNetCore31Installed" Execute="immediate" />
</Fragment>
Run Code Online (Sandbox Code Playgroud)
这就是我遇到问题的地方,因为我总是收到警告消息。一个主意 ?谢谢
调试:您是否将调试器附加到您的自定义操作中,以便您可以看到那里发生了什么?我敢打赌它没有正确设置你的属性。
The custom action might not be running at all?显示一个消息框来进行冒烟测试?更多涉及(附加 Visual Studio 调试器):
关于调试的回答(如果不使用附加的调试器,请略读)
请参阅此处的调试部分(更全面,更多链接)
LaunchCondition :在 MSI 数据库中,启动条件由LaunchCondition 表中的记录表示。该表有两列。Condition列包含一个表达式,必须计算结果为True才能继续安装:
结论:
So your condition does not evaluate to true properly。的实际价值是多少DOTNETCORE31?我敢打赌0。请仔细检查。最简单的方法显然是将其设置为1而不是0直接 - 然后再次编译并测试。暂时硬编码如下:Run Code Online (Sandbox Code Playgroud)<Property Id="DOTNETCORE31">1</Property>
链接:以下是之前关于启动条件和其他主题的一些回答:
minimal dependencies并且debugability- 它以本机方式运行,没有层、模拟和可能损坏的东西)WiX 自定义操作:您有调用自定义操作的基本标记吗?检查编译后的 MSI,Orca查看Binary、CustomAction和InstallExecuteSequence以及InstallUISequence表中是否有条目。一些 WiX 标记模型(掠夺 gihub.com 获取示例?):
<Binary Id="CustomActions" SourceFile="C:\Test.CA.dll" />
<...>
<CustomAction Id="CustomAction1" BinaryKey="CustomActions" DllEntry="CustomAction1"/>
<...>
<InstallUISequence>
<Custom Action="CustomAction1" After="CostFinalize" />
</InstallUISequence>
<...>
<InstallExecuteSequence>
<Custom Action="CustomAction1" After="CostFinalize" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
GUI 和静默安装:显然,您也可以从对话框事件运行自定义操作 - 例如单击按钮 - 但这会使其无法在静默模式下运行。GUI 在静默模式下会被跳过,因此您需要在InstallExecuteSequenceGUI 中运行自定义操作。
| 归档时间: |
|
| 查看次数: |
5823 次 |
| 最近记录: |