Visual studio 2010 使用Visual Studio生成.msi文件,该文件具有运行.bat文件的自定义操作

Visual studio 2010 使用Visual Studio生成.msi文件,该文件具有运行.bat文件的自定义操作,visual-studio-2010,windows-installer,uninstallation,cmd,Visual Studio 2010,Windows Installer,Uninstallation,Cmd,我需要使用Visual Studio构建一个.msi文件,该文件将通过自定义操作执行.bat中的一些命令。我知道我可以通过进入.msi并更改表来实现这一点,我已经让它工作了,但这只是一个短期修复,我需要让它工作。我特别想在卸载时执行自定义操作 我尝试的第一件事是编写一个名为my.bat的.exe。它可以独立工作,但每当我将文件放入文件系统并让自定义操作运行.exe时,它就无法工作。谁知道为什么 我做的另一件事是让自定义操作使用cmd.exe和my.bat作为参数。我在卸载过程中遇到一个错误,事件

我需要使用Visual Studio构建一个.msi文件,该文件将通过自定义操作执行.bat中的一些命令。我知道我可以通过进入.msi并更改表来实现这一点,我已经让它工作了,但这只是一个短期修复,我需要让它工作。我特别想在卸载时执行自定义操作

我尝试的第一件事是编写一个名为my.bat的.exe。它可以独立工作,但每当我将文件放入文件系统并让自定义操作运行.exe时,它就无法工作。谁知道为什么

我做的另一件事是让自定义操作使用cmd.exe和my.bat作为参数。我在卸载过程中遇到一个错误,事件查看器使用/c“[TARGETDIR]batfile.bat将其缩小到cmd.exe,非常类似于


有什么想法可以帮我吗?

像这样的事情怎么样

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);
}

cmd的错误消息是什么?或者它根本没有启动?您可以将
/c
更改为
/k
进行测试:使用
/k
它执行批处理,然后保持交互。键入
退出
关闭会话。它可能会失败,因为您试图在卸载过程删除BAT文件后启动该文件。您检查过了吗?错误是:“C:\Program”未被识别为内部或外部命令、可操作程序或批处理文件。我的批处理文件是:cd“C:\inetpub”“暂停,很明显,我稍后会有一个不同的批处理文件,但这是我正在做的,直到我可以让它工作。这台机器上确实存在inetpub。如果我在我的项目中运行cmd.exe并运行test.bat,它就可以正常工作。这只是通过卸载。是的,我已经检查了自定义操作是否在被删除之前发生。这很有效!对于任何需要更多帮助的人,了解如何使这项工作:1。创建一个.dll 2。使用此代码3。将.dll放入文件系统4中。使用此文件创建自定义操作