gpt4 book ai didi

wix - 如何使用 WIX 3.5 项目/设置将 net.tcp 添加到 "Enabled protocols"?

转载 作者:行者123 更新时间:2023-12-04 02:00:46 25 4
gpt4 key购买 nike

我们有一些安装 WCF 服务的 MSI 包(由 WIX 生成)。这些服务中的大多数都需要 net.tcp 来进行端点绑定(bind)。

我想让我们的部署生活更轻松,并自动化添加 net.tcp 的过程。
我已经知道 WixIisExtension.dll 并利用它的有用功能(创建网站、virt.目录等)。

我可以使用 WixIisExtension 启用 net.tcp 协议(protocol)吗?
如果没有,我该如何实现?

最佳答案

将新项目添加到您的安装解决方案(Windows Installer XML -> C# 自定义操作项目)

在此项目中添加对程序集 Microsoft.Web.Administration 的引用,该引用可在此处找到:C:\Windows\System32\inetsrv 并且是添加协议(protocol)所必需的。

我的自定义操作如下所示:

using System;
using System.Linq;
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Web.Administration;

namespace Setup.CustomAction.EnableProtocols
{
public class CustomActions
{
[CustomAction]
public static ActionResult EnableProtocols(Session session)
{
session.Log("Begin EnableProtocols");

var siteName = session["SITE"];
if (string.IsNullOrEmpty(siteName))
{
session.Log("Property [SITE] missing");
return ActionResult.NotExecuted;
}

var alias = session["VIRTUALDIRECTORYALIAS"];
if (string.IsNullOrEmpty(alias))
{
session.Log("Property [VIRTUALDIRECTORYALIAS] missing");
return ActionResult.NotExecuted;
}

var protocols = session["PROTOCOLS"];
if (string.IsNullOrEmpty(protocols))
{
session.Log("Property [PROTOCOLS] missing");
return ActionResult.NotExecuted;
}

try
{
var manager = new ServerManager();

var site = manager.Sites.FirstOrDefault(x => x.Name.ToUpper() == siteName.ToUpper());
if (site == null)
{
session.Log("Site with name {0} not found", siteName);
return ActionResult.NotExecuted;
}

var application = site.Applications.FirstOrDefault(x => x.Path.ToUpper().Contains(alias.ToUpper()));
if (application == null)
{
session.Log("Application with path containing {0} not found", alias);
return ActionResult.NotExecuted;
}

application.EnabledProtocols = protocols;
manager.CommitChanges();
return ActionResult.Success;
}
catch (Exception exception)
{
session.Log("Error setting enabled protocols: {0}", exception.ToString());
return ActionResult.Failure;
}
}
}
}

请注意,我在这里假设三个属性:SITE、VIRTUALDIRECTORYALIAS & PROTOCOLS

立即构建解决方案。在后台,WiX 创建了两个程序集 %Project%.dll 和 %Project%.CA.dll。 CA.dll 自动包含依赖的 Microsoft.Web.Administration。

然后在您的 WiX 设置项目中包含对新自定义操作项目的引用。引用 %Projet%.CA.dll 需要该引用。

编辑 product.wxs

首先在产品元素内的某处添加属性:
<!-- Properties -->
<Property Id="SITE" Value="MySite" />
<Property Id="VIRTUALDIRECTORYALIAS" Value="MyVirtDirectoryAlias" />
<Property Id="PROTOCOLS" Value="http,net.tcp" />

下面添加二进制元素:
<!-- Binaries -->
<Binary Id="CustomAction.EnableProtocols" SourceFile="$(var.Setup.CustomAction.EnableProtocols.TargetDir)Setup.CustomAction.EnableProtocols.CA.dll" />

请注意,您必须添加 CA.dll。

下面添加自定义操作:
<!-- Custom Actions -->
<CustomAction Id="EnableProtocols" BinaryKey="CustomAction.EnableProtocols" DllEntry="EnableProtocols" Execute="immediate" Return="check" />

最后是您希望执行的安装顺序。
<!-- Installation Sequence -->
<InstallExecuteSequence>
<Custom Action="EnableProtocols" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>

就这样。应该管用。
感谢 Darin Dimitrov 提供上述链接。

关于wix - 如何使用 WIX 3.5 项目/设置将 net.tcp 添加到 "Enabled protocols"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3140662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com