使用 Visual Studio 构建具有运行 .bat 文件的自定义操作的 .msi 文件
Posted
技术标签:
【中文标题】使用 Visual Studio 构建具有运行 .bat 文件的自定义操作的 .msi 文件【英文标题】:Using Visual Studio to build a .msi file that has a custom action to run a .bat file 【发布时间】:2012-06-09 00:24:09 【问题描述】:我需要使用 Visual Studio 构建一个 .msi 文件,该文件将执行一些我在 .bat 中具有自定义操作的命令。我知道我可以通过进入 .msi 并更改表格来实现这一点,我已经让它工作了,但这只是一个简短的修复,我需要让它工作。特别是我想在卸载时执行我的自定义操作。
我尝试的第一件事是编写一个名为 .bat 的 .exe。它可以独立工作,但是每当我将文件放入文件系统并让自定义操作运行 .exe 时,它就无法正常工作。谁知道为什么..
我做的另一件事是让自定义操作使用 cmd.exe 和我的 .bat 作为参数。我在卸载过程中遇到错误,事件查看器使用 /c "[TARGETDIR]batfile.bat 将其缩小到 cmd.exe,与https://***.com/a/6286046/1427105 非常相似。
有什么想法可以帮到我吗?
【问题讨论】:
cmd 的错误信息是什么?还是根本没有开始?您可以将/c
更改为 /k
进行测试:使用 /k
它执行批处理,然后保持交互。输入exit
关闭会话。
它可能会失败,因为您在卸载过程中删除了 BAT 文件后尝试启动它。你检查过吗?
错误是:'C:\Program' 不是内部或外部命令、可运行程序或批处理文件。我的批处理文件是: cd "C:\inetpub" pause 很明显,我稍后会有一个不同的批处理文件,但这就是我正在做的事情,直到我可以让它工作为止。这台机器上确实存在inetpub。如果我在我的项目中运行 cmd.exe 并运行 test.bat 它工作正常。只能通过这个卸载..
是的,我已经检查了自定义操作在被删除之前是否正在发生。
【参考方案1】:
这样的事情呢?
protected override void OnBeforeUninstall(IDictionary savedState)
base.OnBeforeUninstall(savedState);
string assemblyPath = Context.Parameters["assemblypath"];
string parentDirectory = Directory.GetParent(assemblyPath).FullName;
string batch = Path.Combine(parentDirectory, "batfile.bat");
Process p = Process.Start(batch);
while (!p.HasExited)
Thread.Sleep(1000);
【讨论】:
这成功了!对于任何需要更多帮助来了解如何使这项工作的人:1. 创建一个 .dll 2. 使用此代码 3. 将 .dll 放入您的文件系统 4. 使用此文件创建一个自定义操作以上是关于使用 Visual Studio 构建具有运行 .bat 文件的自定义操作的 .msi 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何仅为调试构建运行 Visual Studio 构建后事件
Visual Studio Code 中的 TypeScript 运行构建任务失败
依赖项更改时 Visual Studio 运行自定义构建工具