使用Wix从MSI生成文本

时间:2014-11-19 09:50:50

标签: c++ visual-studio-2010 visual-c++ wix

这可能听起来像是一个虚拟问题,但我想处理使用Wix生成的msi文件的参数。我在VS2010中开发了Visual C ++程序,例如

msiexec /i setup.exe IP="192.168.2.1" PORT="9999"

我想访问那些参数IP和PORT,并将它们写在文本文件中:

{
"IP":"192.168.2.1",
"PORT":"9999"
}

这可能在Wix中吗?如果不是这样的话。

1 个答案:

答案 0 :(得分:1)

我相信有办法做到这一点,虽然我自己没有这样做。

如果您将参数传递给msiexec,如下所示:

msiexec /i setup.exe CUSTOMPROPIP="192.168.1.1" CUSTOMPROPPORT="9999"

然后应该在msi包然后可以解析的属性列表中设置该属性。然后,您可以创建一个自定义操作来处理这些值,它可以将文件写入磁盘。

<Binary Id="SetupCA" SourceFile="SetupCA.CA.dll" />
<CustomAction Id="WRITEFILETODISK" Execute="immediate" BinaryKey="SetupCA" DllEntry="WriteFileToDisk" />

确保您在安装序列中有此自定义操作...

<InstallExecuteSequence>
  <Custom Action="WRITEFILETODISK" Sequence="2" />
  ...
</InstallExecuteSequence>

您将需要一个自定义操作项目来创建此SetupCA.CA.dll。自定义操作的代码类似于:

namespace SetupCA
{
    public class CustomActions
    {

        [CustomAction]
        public static ActionResult WriteFileToDisk(Session session)
        {
            session.Log("Begin WriteFileToDisk"); // This is useful to see when it is firing through the log file created during install with /l*vx parameter in msiexec

            // Do work here...
            string ipaddress = session["CUSTOMPROPIP"];
            string ipport = session["CUSTOMPROPPORT"];

            session.Log("Ending WriteFileToDisk");
            return ActionResult.Success;
        }
    }
}