12 windows-installer action properties
我在MSI安装程序中有一个自定义操作,它对某些配置文件进行了一些更改.我的要求是以静默模式运行安装,所以我使用的是msiexec.这是命令:
msiexec /i myInstaller.msi /l* out.txt myContextParameter=value1
Run Code Online (Sandbox Code Playgroud)
myContextParameter永远不会传递给自定义动作,所以当我这样做时,
context.Parameters["myContextParameter"]我得到一个null值.
当我在UI模式下运行MSI时,参数正确传递.我还确保在属性中正确设置了属性的名称CustomActionData.
我一直在这个墙上撞墙,所以这就是我发现的:
您必须在命令行上设置参数,并在每个自定义操作上设置"CustomActionData"属性(无论您在Install,Commit等下有什么)
您的命令行看起来像这样:
msiexec /i myInstaller.msi MYFIRSTPARAM=VALUE1 MYSECONDPARAM=VALUE2
然后,您的CustomActionData应如下所示:
/myfirstparam=[MYFIRSTPARAM] /mysecondparam=[MYSECONDPARAM]
现在,这是一堆特殊情况:
看起来@Klaus是对的,您需要在参数名称中使用ALLCAPS.
如果您的值包含空格,则在命令行和CustomActionData属性中都需要引用它们,如:
msiexec /i myInstaller.msi MYFIRSTPARAM="VALUE1" MYSECONDPARAM="VALUE2"
/myfirstparam="[MYFIRSTPARAM]" /mysecondparam="[MYSECONDPARAM]"
如果您的值以斜杠结尾,就像大多数文件路径一样,那么您将遇到一个奇怪的问题:当msiexec构建您的customactiondata时,它将创建此字符串:
/myfirstparam="C:\myfile\" /mysecondparam="C:\myfile\"
如果你在命令行上使用引号并不重要,如果斜杠是你值的最后一个字符,它将被有效地读作转义字符,并将转义你的customactiondata属性中的引号.这会造成严重破坏.解决方案是:1)在参数和最后一个引号之间添加一个空格,然后记住在代码中的某个地方修剪(),或者2)在参数和引号之间添加和额外的斜杠,以逃避逃脱字符.请参阅以下两种方法:
/myfirstparam="[MYFIRSTPARAM] " /mysecondparam="[MYSECONDPARAM]\"
希望有所帮助.
MixedCase 属性是"私有",不会从命令行传入.
ALLCAPS 属性是"public",可以在命令行中传递.
但是,只有安全的公共属性才会传递到"服务器"(即在UAC提升期间保留).请参阅SecureCustomProperties属性文档.
假设您尝试在延迟CA中访问此属性,这将发生在服务器端,因此您需要使用也标记为安全的公共属性(所有大写).
以下是使用WiX的示例:
<Property Id="MYPUBLICPROPERTY" Secure="yes" Value="{}">
Run Code Online (Sandbox Code Playgroud)