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