在安装项目中,可执行文件(例如“.exe、.dll、.js、.vbs”)是可以接受的,但无法.bat
在自定义操作中运行文件。
问题是如何*.bat
在安装过程中运行文件?
在安装项目中,可执行文件(例如“.exe、.dll、.js、.vbs”)是可以接受的,但无法.bat
在自定义操作中运行文件。
问题是如何*.bat
在安装过程中运行文件?
好吧,经过大量搜索和反复试验,我已经解决了这个问题。我不确定这是否是最好的方法,但它确实有效。
场景如下:我有一个应用程序,我想通过 Visual Studio 安装项目进行部署。除了我的应用程序文件之外,我还想在目标目录中创建一个包含批处理 (.bat) 文件的子目录。我希望这个文件在安装过程结束时运行。
这是你要做的:
/c "[TARGETDIR]subdirectoryname\batchfile.bat"
在 Arguments 属性中,其中 subdirectoryname 应替换为子目录的名称(如果您像我一样将批处理文件放在子目录中...如果没有,则值应该是/c "[TARGETDIR]batchfile.bat"
)和 batchfile.bat 应该是您的批处理文件的文件名。就是这样。一旦安装过程的其余部分完成,现在将执行批处理文件。
为了清楚起见,这是一个示例:
我的批处理文件: blah.bat
我的子目录:mydir
然后,针对 cmd.exe 的自定义操作的参数值将是
/c "[TARGETDIR]mydir\blah.bat"
希望对某人有所帮助!
达到相同结果的另一种方法是将 .vbs 文件放入运行相应 .bat 文件的自定义操作中。以下代码是我放入安装应用程序文件夹的“RunRegisterComponents.vbs”。当然,我将 [TARGETDIR] 作为 .vbs 参数放在 Visual Studio 属性窗口中。
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)
那是我设置自定义操作时:
我希望这可以帮助你!
检查这篇文章(文章已弃用),即使它在 VB.NET 中,它也适用于 C#。最重要的部分是(转换为 C#)创建一个新的类库,并添加一个具有以下内容的新安装程序类: 如文章中所述,您可以创建一个新的自定义操作,并引用您刚刚创建的项目。
override void Commit(IDictionary savedState)
{
base.Commit(savedState);
System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
}
现在我们正在将批处理文件添加到您的安装程序项目中。创建一个安装项目并像往常一样进行配置,包括您将放置批处理文件的子目录(如果您不想将它放在子目录中,可以直接将它放在应用程序文件夹中)。
在“文件系统”视图中(在解决方案资源管理器中右键单击项目->查看->文件系统),添加要执行的批处理文件。
构建安装程序项目。
如果您在安装过程中尝试运行具有相对路径的批处理文件,那肯定会失败。这是因为批处理文件将考虑安装程序运行的目录,而不是文件的安装位置。使用将批处理文件复制到临时目录的安装程序构建器。