更新2:该功能的要求被拒绝,仅仅是因为维克斯不能支持这些“假”变量提供cmd.exe的。因此,下面公认的答案仍然是最佳解决方案。
更新:我已发出功能请求,以添加预处理器动态环境变量支持。一旦开发人员做出响应,我将更新此线程。
原始问题:
我想写出安装程序已建立到属性的日期。
<Property Name="BuildDate" Value="$(env.Date)" />
Run Code Online (Sandbox Code Playgroud)
要么
<Property Name="BuildDate" Value="$(sys.Date)" />
Run Code Online (Sandbox Code Playgroud)
抛出CNDL0150:“未定义的预处理程序变量”,而
<Property Name="BuildDate" Value="[Date]" />
Run Code Online (Sandbox Code Playgroud)
当然会将字符串“ [Date]”写入MSI属性。
我该如何实现?
编辑:在所有情况下,我都尝试过“日期”,结果相同。另外,添加一个新的环境变量“ BuildDate”并将其设置为“%DATE%”会消除编译错误,但是写入MSI的值不能解析为实际日期,而是生成字符串“%DATE%” ”。
例如,您可以在第一个属性组的wix项目(.wixproj)中添加属性(您可以根据自己的喜好格式化日期和/或时间):
<Date>$([System.DateTime]::Now.ToString("yyyyMMddhhmm"))</Date>
Run Code Online (Sandbox Code Playgroud)
然后在配置属性组中将此属性添加到中<DefineConstants>,如果您有更多的常量,请使用分号将它们分开;:
<DefineConstants>Date=$(Date)</DefineConstants>
Run Code Online (Sandbox Code Playgroud)
最后添加MSI属性:
<Property Id="BuildDate" Value="$(var.Date)" />
Run Code Online (Sandbox Code Playgroud)