我有一个自定义操作(RunEncryption2),我用它来使用aspnet_regiis.exe加密配置文件。我使用的自定义操作类型是一个EXE,其路径引用目录(初始类型34),在系统上下文中使用延迟执行(因此最终类型为3106)。我要加密的文件是在INSTALLDIR上,所以我有一个Set Property自定义操作(SetRunEncryption2,类型51),其中我设置了RunEncryption2 = [INSTALLDIR]。我的两个自定义操作如下所示:
SetRunEncryption2
Property Name: RunEncryption2
Property Value: [INSTALLDIR]
RunEncryption2
Working Directory: WindowsFolder
File Name & Command line: [WindowsFolder]Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" "[CustomActionData]" -prov "DataProtectionConfigurationProvider"
安装程序运行时,我没有收到任何错误,但文件根本没有加密。当我查看日志时,我得到以下内容:
MSI (s) (34:C0) [17:32:11:356]: Executing op: CustomActionSchedule(Action=RunEncryption2,ActionType=3106,Source=C:\WINDOWS\,Target=C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" "" -prov "DataProtectionConfigurationProvider",CustomActionData=C:\Test\)
从日志中我可以看到CustomActionData属性已正确设置,但是它没有作为命令的一部分包含在内。
此时,我必须使命令工作的唯一方法是传递一个硬编码的INSTALLDIR值,否则它似乎无法正常工作。
我试过了:
当我运行上面的选项1时,我在日志中收到1722错误:
MSI (s) (C4:50) [12:49:46:968]: Note: 1: 1722 2: RunEncryption2 3: C:\WINDOWS\ 4: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" "C:\Test\" -prov "DataProtectionConfigurationProvider"
Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. Action RunEncryption2, location: C:\WINDOWS\, command: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" "C:\Test\" -prov "DataProtectionConfigurationProvider"
MSI (s) (C4:50) [12:49:56:841]: Product: TestEncryption -- Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. Action RunEncryption2, location: C:\WINDOWS\, command: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" "C:\Test\" -prov "DataProtectionConfigurationProvider"
有谁知道如何才能正确执行此命令并动态传递INSTALLDIR的值?
答案 0 :(得分:0)
最后发现问题不在于传递属性的自定义操作,而是aspnet_iisreg期望参数的方式。
当我硬编码我传递c:\Test\
的安装路径时,INSTALLDIR正在传递带有斜杠(例如gr。c:\Test
)的字符串。
解决方案包括创建另一个自定义操作,删除尾部斜杠并将值存储在新属性中,然后可以将其用作aspnet_iisreg的参数。
顺便说一下,正如Michael Urman所说,没有必要使用CustomActionData。感谢。