creasting wix 自定义操作应采取哪个方向?
Which direction to take for creasting wix custom actions?
想弄清楚如何开始编写 Wix 扩展。正在阅读 this page,它允许人们开始创建用于向安装程序添加自定义操作的 wix 扩展。
下一步,想知道如何开始对操作本身进行编码,我放入了一种方法的旧安装脚本代码并开始更正它。在 MsiGetProperty 上窒息,我想弄清楚我需要通过 "using" 导入什么才能使其可用。然后我遇到了 this page ,它似乎使用了其他未在 wix 骨架页面上引用的属性。然后我想,"I wonder if there was a project type for wix extensions made when I instlled it?" 是的,有!代码片段看起来像第二个 link 中的代码片段,两者都没有反映 wix 页面上的内容...
那么,我该怎么办?我有几个要从 installshield 移植的自定义操作,只需要一个可靠的示例来说明如何构建项目和方法并将其挂接到我的 wix xml 文件中。谢谢!
我将举例说明我是如何做到的:
首先创建您的自定义操作:
[CustomAction]
public static ActionResult CreateIisConfigs(Session session)
{
try
{
LoadXmlFile(session);
var iisSettings = new IisSettings
{
PathName = session["PATHNAME"],
UserPath = session["USERPATH"],
Website = session["WEBSITE"],
SqlDataSource = session["BLOBSQLDATASOURCE"],
AppPool = session["BLOBAPPLICATIONPOOL"],
ApplicationName = session["BLOBAPPLICATION"],
ApplicationPath = @"Sites\Blabla.Application.WebAPI.Blobs",
EnvirName = session["BLOBENVIRONMENTNAME"],
EnvirPath = session["ENVIRONMENTPATH"],
IdentityDomainType = session["BLOBIDENTITYDOMAIN"],
SitePhysPath = session["SITEPHYSPATH"],
SqlPass = session["BLOBSQLPASSWORD"],
SqlUser = session["BLOBSQLUSER"],
SslCertPath = session["SSLCERTPATH"],
SslCertPass = session["SSLCERTPASS"],
UserAppl = session["BLOBUSERAPPLICATION"],
};
IisConfigs.ApplyNewConfigs(iisSettings);
}
catch (Exception e)
{
session.Log("----------------------------------------IIS ERROR ---------------------------------------");
session.Log(e.ToString());
return ActionResult.Failure;
}
return ActionResult.Success;
}
然后在你的 wxs 中初始化属性等。:
<Property Id="PATHNAME" Hidden="yes"/>
<Property Id ="WEBSITE" Hidden="yes"/>
<Property Id="SITEPHYSPATH" Hidden="yes"/>
<Property Id="USERPATH" Hidden="yes"/>
声明引用 dll 或自定义操作的二进制文件:
<Binary Id="CustomActionsId" SourceFile="..\Blob.CustomActions\bin\Debug\Blob.CustomActions.CA.dll"/>
声明您的自定义操作:
<CustomAction Id="CreateIisConfigs" BinaryKey="CustomActionsId" Return="check" Execute="immediate" DllEntry="CreateIisConfigs" />
最后决定自定义操作的执行方式:
<InstallExecuteSequence>
<Custom Action="CreateIisConfigs" Before="InstallInitialize">NOT Install</Custom>
</InstallExecuteSequence>
想弄清楚如何开始编写 Wix 扩展。正在阅读 this page,它允许人们开始创建用于向安装程序添加自定义操作的 wix 扩展。
下一步,想知道如何开始对操作本身进行编码,我放入了一种方法的旧安装脚本代码并开始更正它。在 MsiGetProperty 上窒息,我想弄清楚我需要通过 "using" 导入什么才能使其可用。然后我遇到了 this page ,它似乎使用了其他未在 wix 骨架页面上引用的属性。然后我想,"I wonder if there was a project type for wix extensions made when I instlled it?" 是的,有!代码片段看起来像第二个 link 中的代码片段,两者都没有反映 wix 页面上的内容...
那么,我该怎么办?我有几个要从 installshield 移植的自定义操作,只需要一个可靠的示例来说明如何构建项目和方法并将其挂接到我的 wix xml 文件中。谢谢!
我将举例说明我是如何做到的:
首先创建您的自定义操作:
[CustomAction]
public static ActionResult CreateIisConfigs(Session session)
{
try
{
LoadXmlFile(session);
var iisSettings = new IisSettings
{
PathName = session["PATHNAME"],
UserPath = session["USERPATH"],
Website = session["WEBSITE"],
SqlDataSource = session["BLOBSQLDATASOURCE"],
AppPool = session["BLOBAPPLICATIONPOOL"],
ApplicationName = session["BLOBAPPLICATION"],
ApplicationPath = @"Sites\Blabla.Application.WebAPI.Blobs",
EnvirName = session["BLOBENVIRONMENTNAME"],
EnvirPath = session["ENVIRONMENTPATH"],
IdentityDomainType = session["BLOBIDENTITYDOMAIN"],
SitePhysPath = session["SITEPHYSPATH"],
SqlPass = session["BLOBSQLPASSWORD"],
SqlUser = session["BLOBSQLUSER"],
SslCertPath = session["SSLCERTPATH"],
SslCertPass = session["SSLCERTPASS"],
UserAppl = session["BLOBUSERAPPLICATION"],
};
IisConfigs.ApplyNewConfigs(iisSettings);
}
catch (Exception e)
{
session.Log("----------------------------------------IIS ERROR ---------------------------------------");
session.Log(e.ToString());
return ActionResult.Failure;
}
return ActionResult.Success;
}
然后在你的 wxs 中初始化属性等。:
<Property Id="PATHNAME" Hidden="yes"/>
<Property Id ="WEBSITE" Hidden="yes"/>
<Property Id="SITEPHYSPATH" Hidden="yes"/>
<Property Id="USERPATH" Hidden="yes"/>
声明引用 dll 或自定义操作的二进制文件:
<Binary Id="CustomActionsId" SourceFile="..\Blob.CustomActions\bin\Debug\Blob.CustomActions.CA.dll"/>
声明您的自定义操作:
<CustomAction Id="CreateIisConfigs" BinaryKey="CustomActionsId" Return="check" Execute="immediate" DllEntry="CreateIisConfigs" />
最后决定自定义操作的执行方式:
<InstallExecuteSequence>
<Custom Action="CreateIisConfigs" Before="InstallInitialize">NOT Install</Custom>
</InstallExecuteSequence>