2010-04-21 60 views
1

我想运行一个批处理文件,我通过以下操作:Wix - 如何指定要在其中运行批处理文件的目录?

<CustomAction Id='InstallFilter' FileKey='install' ExeCommand='' Execute='deferred' /> 

<InstallExecuteSequence> 
    <Custom Action='InstallFilter' Before='InstallFinalize' /> 
</InstallExecuteSequence> 

这将执行批处理文件,但它使用C运行:\ Windows \ System32下(或类似的东西)。我希望它运行在找到该文件的目录中。它不能让我指定具有FileKey属性的Directory属性。我如何告诉安装程序用完特定的目录,最好是通过目录ID。

此外,当我尝试使用脚本卸载我的应用程序时,出现错误消息,提示“Windows安装程序包存在问题,无法运行完成安装所需的程序。这是有道理的,因为脚本运行时,文件已被删除。现在的问题是:

  1. 如何指定我的行动只有上安装运行,无法卸载?

  2. 如何卸载此当前副本?

回答

1

安装程序以提升模式作为TrustedInstaller用户(管理员)运行。默认情况下,cmd.exe工作文件夹在提升时为C:\Windows\System32。有没有办法(或者至少我不知道一个)强制工作文件夹升高cmd.exe是不同的。 (考虑运行升高cmd -c some.cmd从随机文件夹的安全问题)

您脚本可以采取它所在的文件夹,并改变当前文件夹中这样说:

setlocal 
pushd %~dp0 

rem ... script logic ... 

popd 
endlocal 

你可以看一下不同的条件这将允许您指定您的自定义操作何时需要在@Cheeso中执行回答他自己的问题how to run custom action on uninstall only。 (不想不必要地重复这些信息)

更新:如果NOT INSTALLED不适合你的具体情况,则尝试NOT REMOVE

+0

推动的建议效果很好。谢谢。不过,我似乎无法让它在安装时运行。根据您发送的信息,我添加了Not INSTALLED作为我的自定义操作的值,但它仍然在卸载时运行(并失败)。有什么建议么? – 2010-04-21 19:55:46

+0

嗯..也许我错了。我再次尝试过,而“未安装”似乎已经工作。它不区分大小写,是吗?无论如何,一切正常,谢谢。 – 2010-04-21 20:17:42