Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JScript或VBScript进行自定义操作_Vbscript_Wix - Fatal编程技术网

使用JScript或VBScript进行自定义操作

使用JScript或VBScript进行自定义操作,vbscript,wix,Vbscript,Wix,在我的安装程序中,我需要执行以下操作:从注册表获取外部应用程序的位置,并在此“父”目录中为我的应用程序执行程序和各种文件创建文件夹。我知道如何从注册表中获取此目录,但不幸的是,我获取的字符串如下所示:C:/program Files/Manufacturer/ExtApplication/extapp.exe 当然,它不适合我。因此,据我所知,我需要从中删除“extapp.exe”部分。我试图通过使用VBScript或JScript的CustomAction来实现这一点,但我对这两种脚本以及wi

在我的安装程序中,我需要执行以下操作:从注册表获取外部应用程序的位置,并在此“父”目录中为我的应用程序执行程序和各种文件创建文件夹。我知道如何从注册表中获取此目录,但不幸的是,我获取的字符串如下所示:C:/program Files/Manufacturer/ExtApplication/extapp.exe

当然,它不适合我。因此,据我所知,我需要从中删除“extapp.exe”部分。我试图通过使用VBScript或JScript的CustomAction来实现这一点,但我对这两种脚本以及wix本身都没有足够的经验。我读过关于Type51、Type35等CustomAction类型的文章,但我不知道应该如何1)删除字符串的部分;2) 在目录元素中使用它;3) 在安装文件之前执行所有这些操作


如果您有任何建议(不使用脚本),我们将不胜感激

首先,不应该使用脚本自定义操作。它们非常脆弱:

以下是我将如何滚动:

1) 使用RegLocator/AppSearch将注册表值拉入isntall开头的属性中。然后调用一个解析文件名的C++自定义操作。应在CostInitialize之前计划此自定义操作

这里不使用51或35,而是使用类型1调用MsiSetProperty(),该调用与类型51相同。51和35之间的区别是,成本计算前使用51,成本计算后使用35


设置的属性名称应与正在使用的目录表行的Id名称匹配。该行的任何子项都将与您设置的路径相对。

对不起,您不能举个例子吗?我已经编写了一个dll,但我不知道如何编写自定义操作,以便最终设置目录。对不起,我回答了问题,没有提供完整的解决方案。如果你进入VisualStudio,你会看到文件新的Wix C++的自定义操作。它会为你建立一个项目。搜索MSDN以获取如何使用MsiGetProperty()和MsiSetProperty()的示例。搜索StackOverflow,查看如何删除尾随反斜杠的示例,然后阅读如何将自定义操作插入WiX。如果你需要一个如何做到这一切的例子,我随时都可以咨询。谢谢你的建议和耐心-最后我做到了:)很高兴听到!最后一件事。。。确保在UI和Execute序列中安排CA,并且只运行一次。另外,请确保您使用的是安全属性(即公共属性和列在安全自定义属性中的属性),以确保它在静默运行或提升运行时正常工作。