5

我需要在 Windows 安装程序项目(标准 OOTB VS 2008 安装程序项目-vdproj)中执行一个批处理文件作为卸载过程的一部分。无法直接从安装程序项目中的自定义操作执行 bat 文件,因此我编写了一个快速 vbs 脚本来调用所需的 bat 文件。
vbs代码:

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

当此脚本独立于卸载运行时,它可以完美运行。但是,当作为卸载的一部分运行时,它不会执行 bat 文件(但会显示消息框,所以我知道调用了 vbs 文件)。没有报告错误(至少我可以说)。为什么此脚本不能作为“卸载自定义操作”的一部分工作

4

6 回答 6

6

我遇到了同样的问题,问题是你不能在 vbs 文件中调用 WScript - 你只需要调用 CreateObject

IE。

Set WshShell = CreateObject( "WScript.Shell" )
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing
于 2008-09-23T20:48:05.133 回答
1

您需要更广泛地分发您的应用程序,我会更强烈地建议您反对脚本化的自定义操作。我过去写过一堆,但我发现太多的计算机在运行VBScript或 JavaScript 时出现问题。我最终用 C++ 重写了它们来处理这种情况。这里有几篇文章深入解释了为什么应该避免脚本化的自定义操作:

于 2008-10-01T19:34:48.927 回答
0

在您的安装程序类中,您是否覆盖了 Uninstall 方法:

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

其次,您是否限定了批处理文件的完整路径?

于 2008-09-19T02:01:30.080 回答
0

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

于 2008-09-19T02:01:49.237 回答
0

Windows 安装程序脚本通常作为系统运行,除非您另有说明。您的批处理文件是否可能需要由交互式用户运行?

于 2008-09-23T20:45:00.740 回答
0

对我有用的是指定 .bat 文件的完整路径。

于 2010-09-20T11:23:32.893 回答