wix自定义动作的哪个方向?

时间:2016-03-07 17:38:51

标签: c# wix windows-installer

寻找有关如何开始编写wix扩展的清晰度。正在阅读this page,这允许我们开始创建一个wix扩展,用于向安装程序添加自定义操作。

接下来,我想知道如何开始编写动作本身,我在旧的installscript代码中删除了一个方法并开始纠正它。在MsiGetProperty上窒息,我想通过"使用"来弄清楚我需要导入什么。使其可用。然后我遇到了this page,似乎有其他属性未在wix骨架页面上引用。然后我想,"我想知道在我安装它时是否有一个用于wix扩展的项目类型?"是的,有!代码片段看起来像来自第二个链接,它们都不反映wix页面上的内容......

那么,我该怎么办?我有几个自定义操作从installshield端口,只需要一个如何构建项目和方法的实例,并将其挂钩到我的wix xml文件中。谢谢!

1 个答案:

答案 0 :(得分:1)

我给你一个如何做的例子:

首先创建自定义操作:

 [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>