2008-09-19 160 views
5

我需要在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文件)。没有错误报告(至少我可以告诉)。为什么这个脚本的工作不一样的“卸载自定义操作”

+0

批处理文件的用途是什么,您是否试图通过批处理文件删除Windows服务?如果是的话,在服务项目中使用Installer类有一些更简单的方法。让我知道,我会发布我一直使用的代码。 – 2008-09-19 02:03:39

回答

0

在你安装程序类的一部分,你重写卸载方法:

Public Overrides Sub Uninstall(ByVal savedState As System.Collections.IDictionary) 
      MyBase.Uninstall(savedState) 
      'Shell to batch file here 
    End Sub 

其次,你有资格的完整路径批处理文件?

0

您是否检查过批处理文件在脚本中看到的当前目录中?我会添加另一条消息显示它正在使用的目录,以确保它实际上试图执行您认为它所在的批处理文件。

0

Windows Installer脚本通常以System身份运行,除非您另行说明。交互式用户可能需要运行批处理文件吗?

6

我碰到的这个同样的问题,问题是,你不能VBS文件中调用WScript的 - 你需要只需要调用的CreateObject

即。

Set WshShell = CreateObject("WScript.Shell") 
command = "uninstall-windows-serivce.bat" 
msgbox command 
WshShell.Run ("cmd /C " & """" & command & """") 
Set WshShell = Nothing 
+3

原因是,正如我昨天发现的那样,您的vbs文件不在Windows脚本宿主中,而是由MSI本身托管。因此WMI API不可用。没有“WScript”。虽然看起来WScript是可访问的(即“WScript.Shell”),但这只是一个命名空间而不是对象“WScript”。 – 2008-11-19 08:41:11

1

您需要分发应用程序的范围越广,我建议您对脚本化的自定义操作的强度越强。我过去曾经写过一大堆,但是我发现运行VBScript或JavaScript的计算机太多了。我最终用C++重写了它们来处理这种情况。这里有几个岗位,其中提供了为什么你应该避免脚本自定义操作进行了深入的解释:

0

什么工作对我来说是指定的完整路径.bat文件。

相关问题