从Windows安装程序执行脚本文件自定义操作
我需要在Windows安装程序项目(标准OOTB VS 2008安装程序项目-vdproj)中作为卸载过程的一部分执行批处理文件。无法直接从安装程序项目的自定义操作中执行bat文件,因此我编写了一个快速vbs脚本来调用所需的bat文件。
VBS代码:从Windows安装程序执行脚本文件自定义操作
Set WshShell = WScript.CreateObject("WScript.Shell")
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing
当这个脚本运行独立的卸载的,它完美的作品。但是,作为卸载的一部分运行时,它不会执行bat文件(但会显示消息框,因此我知道调用vbs文件)。没有错误报告(至少我可以告诉)。为什么这个脚本的工作不一样的“卸载自定义操作”
在你安装程序类的一部分,你重写卸载方法:
Public Overrides Sub Uninstall(ByVal savedState As System.Collections.IDictionary)
MyBase.Uninstall(savedState)
'Shell to batch file here
End Sub
其次,你有资格的完整路径批处理文件?
您是否检查过批处理文件在脚本中看到的当前目录中?我会添加另一条消息显示它正在使用的目录,以确保它实际上试图执行您认为它所在的批处理文件。
Windows Installer脚本通常以System身份运行,除非您另行说明。交互式用户可能需要运行批处理文件吗?
我碰到的这个同样的问题,问题是,你不能VBS文件中调用WScript的 - 你需要只需要调用的CreateObject
即。
Set WshShell = CreateObject("WScript.Shell")
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing
原因是,正如我昨天发现的那样,您的vbs文件不在Windows脚本宿主中,而是由MSI本身托管。因此WMI API不可用。没有“WScript”。虽然看起来WScript是可访问的(即“WScript.Shell”),但这只是一个命名空间而不是对象“WScript”。 – 2008-11-19 08:41:11
您需要分发应用程序的范围越广,我建议您对脚本化的自定义操作的强度越强。我过去曾经写过一大堆,但是我发现运行VBScript或JavaScript的计算机太多了。我最终用C++重写了它们来处理这种情况。这里有几个岗位,其中提供了为什么你应该避免脚本自定义操作进行了深入的解释:
什么工作对我来说是指定的完整路径.bat文件。
批处理文件的用途是什么,您是否试图通过批处理文件删除Windows服务?如果是的话,在服务项目中使用Installer类有一些更简单的方法。让我知道,我会发布我一直使用的代码。 – 2008-09-19 02:03:39