我有一个非常简单的 C# 程序,需要静默卸载旧产品。因此,我设置了一个流程并使用正确的参数运行它,当我逐步执行代码时,它每次都能正常工作。当我从命令行运行它时,它每次都会失败。我正在捕获 StandardOut 和 StandardError 和 StandardOut 只包含文本:
此操作仅对当前安装的产品有效。
如果我然后立即在调试模式下运行它,它工作正常,所以显然没有安装该产品是不正确的。
这是代码:
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = processToRun;
process.StartInfo.Arguments = args;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
File.WriteAllText("stdout.txt", output);
string err = process.StandardError.ReadToEnd();
File.WriteAllText("stderr.txt", err);
process.WaitForExit();
以下是以下值:
StartInfo.FileName = "C:\Program Files (x86)\InstallShield 安装信息{325FAC03-900A-4BB2-B45E-1D0EB4D414BE}\setup.exe"
StartInfo.args = /s /f1"C:\Users\User\CommonCustomActions\Uninstall 5.0.0-5.3.2\Uninstall 5.0.0-5.3.2\bin\Debug\Uninstall response files\5.2.1\UNINST- 5.2.1.iss"
有任何想法吗?
ps 原始安装是作为 InstallShield InstallScript MSI 项目构建的,这就是我需要传递“响应文件”的原因