如何在安装过程中运行“.bat”文件?
-
19-09-2019 - |
题
在安装项目中,诸如“.exe、.dll、.js、.vbs”之类的可执行文件是可以接受的,但无法运行 .bat
自定义操作中的文件。
问题是如何运行 *.bat
安装过程中的文件?
解决方案
好吧,经过大量搜索和反复试验,我解决了这个问题。我不确定这是否是最好的方法,但它确实有效。
这是场景:我有一个应用程序想要通过 Visual Studio 安装项目进行部署。除了我的应用程序文件之外,我还想在目标目录中创建一个包含批处理 (.bat) 文件的子目录。我希望该文件在安装过程结束时运行。
这就是你要做的:
- 创建一个安装项目并像平常一样进行配置,包括放置批处理文件的子目录(如果您不想将其放在子目录中,可以直接将其放置在应用程序文件夹中)。
- 在“文件系统”视图中(在解决方案资源管理器中右键单击项目->视图->文件系统),添加要执行的批处理文件 和 cmd.exe (C:\Windows\System32\cmd.exe)
- 打开“自定义操作”视图(在解决方案资源管理器中右键单击项目->视图->自定义操作)
- 右键单击“提交”并选择“添加自定义操作”
- 导航到 cmd.exe 并选择它。
- 打开新创建的自定义操作的属性面板。
- 从 Arguments 属性中删除 /Commit。
- 进入:
/c "[TARGETDIR]subdirectoryname\batchfile.bat"
在 Arguments 属性中,其中 subdirectoryname 应替换为子目录的名称(如果您像我一样将批处理文件放入子目录中......如果你没有,该值应该是/c "[TARGETDIR]batchfile.bat"
)和batchfile.bat应该是批处理文件的文件名。
就是这样。一旦安装过程的其余部分完成,现在将执行批处理文件。
为了清楚起见,下面是一个示例:
我的批处理文件: 等等.bat
我的子目录: 我的目录
我的自定义操作的目标 cmd.exe 的参数值将是
/c "[TARGETDIR]mydir\blah.bat"
希望对某人有帮助!
其他提示
查看这篇文章(文章已弃用),即使它是在 VB.NET 中,它也适用于 C#。最重要的部分是(翻译为 C#)创建一个新的类库,并添加一个新的安装程序类,其中包含以下内容:正如文章中所述,您可以参考刚刚创建的项目创建一个新的自定义操作。
override void Commit(IDictionary savedState) { base.Commit(savedState); System.Diagnostics.Process.Start("myApp.bat","your bat arguments"); }
现在我们正在将批处理文件添加到您的安装程序项目中。创建一个安装项目并像平常一样进行配置,包括放置批处理文件的子目录(如果您不想将其放在子目录中,可以直接将其放置在应用程序文件夹中)。
在“文件系统”视图中(在解决方案资源管理器中右键单击项目->视图->文件系统),添加要执行的批处理文件。
构建安装程序项目。
要达到同样的结果的另一种方式是把在自定义操作.vbs文件运行通讯员.bat文件。 下面的代码是“RunRegisterComponents.vbs”我把安装应用程序文件夹。当然,我把[TARGETDIR]如在Visual Studio属性窗口.vbs的参数。
dim WshShell
Set WshShell = CreateObject("WScript.Shell")
' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir= property("CustomActionData")
' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)
' Set the current directory
WshShell.CurrentDirectory = programDir
' Run batch.
ret = WshShell.Run (commandString, 0, 0)
这是因为我把我的自定义操作:
我希望这可以帮助你!
如果你想运行在安装过程中有相对路径的批处理文件,这将肯定失败。这是因为正在安装的文件在批处理文件将考虑在安装程序运行的目录,而不是。使用安装程序构建器复制批处理文件到临时目录。