如何解决如何使用 wix 安装程序启用 Windows 功能
我使用的是 Windows 10 64 位操作系统。 IT 预先安装了 .net framework 3.5,我们只需要启用它即可让 .net 依赖的应用程序正常工作
我的要求是创建一个新的 MSI,首先启用 .net 3.5,然后安装我的应用程序。
首先我尝试创建 bundle,但 bundle 只创建 EXE,它没有安装 .net 框架的权限。后来我在 Product.wsx 中添加了自定义操作来运行“NetFx20SP2_x64.exe”。但我不确定这样做是否正确。
有什么方法可以使用 wix installer(3.11) 启用 .NET framework 3.5,而无需调用可执行文件或创建包。
Bundle.wsx (code snippet)
<PackageGroup Id="Netfx4Full">
<ExePackage Id="Netfx4Full"
Cache="yes"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
Vital="yes"
InstallCondition="VersionNT64"
InstallCommand="/s"
UninstallCommand="/s /uninstall"
SourceFile=".\NetFx20SP2_x64.exe"
DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" />
</PackageGroup>
Custom action in Product.wsx
<!--CustomAction Id="RegisterEXE"
Directory="APPLICATIONROOTDIRECTORY"
ExeCommand=""[APPLICATIONROOTDIRECTORY]Upgrade\NetFx20SP2_x64.exe" /Register"
Execute="deferred"
Return="ignore"
Impersonate="no"
/-->
解决方法
你的方式还不错。没有找到没有 CustomAction 的选项来解决这个问题。
我个人更喜欢使用 DISM command 运行 cmd 的自定义操作。在这种情况下,您将有 exit code 显示操作结果。
例如:
var command = @"/c Dism /online /enable-feature /featurename:NetFx3 /All";
var output = string.Empty;
using (var p = new Process())
{
p.StartInfo = new ProcessStartInfo()
{
FileName = "cmd.exe",Arguments = command,UseShellExecute = false,RedirectStandardError = true,RedirectStandardOutput = true,CreateNoWindow = true,};
p.Start();
while (!p.StandardOutput.EndOfStream)
{
output += $"{p.StandardOutput.ReadLine()}{Environment.NewLine}";
}
p.WaitForExit();
// Here I'll recommend you to analyze the result
if (p.ExitCode != 0)
{
throw new Exception($"{p.ExitCode}:{ p.StandardError.ReadToEnd()}");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。