如何使用c#通过调用该软件注册表文件中列出的软件卸载字符串来卸载该软件,但进程不起作用

本文关键字:软件 卸载 字符串 不起作用 进程 文件 何使用 调用 注册表 软件注册 | 更新日期: 2023-09-27 18:22:25

我正在开发一个软件,该软件将列出所有软件安装在计算机中现在我想使用C#中的程序卸载它在中调用该软件的卸载密钥注册表项我的程序是就像那样,但过程不起作用

var UninstallDir = "MsiExec.exe /I{F98C2FAC-6DFB-43AB-8B99-8F6907589021}";
string _path = "";
string _args = "";
Process _Process = new Process();
if (UninstallDir != null && UninstallDir != "")
{
    if (UninstallDir.StartsWith("rundll32.exe"))
    {
        _args = ConstructPath(UninstallDir);
        _Process.StartInfo.FileName = Environment.SystemDirectory.ToString() + "''explorer.exe";
        _Process.StartInfo.Arguments = Environment.SystemDirectory.ToString() + "''" + UninstallDir;
        _Process.Start();
    }
    else if (UninstallDir.StartsWith("MsiExec.exe"))
    {
        _args = ConstructPath(UninstallDir);
        _Process.StartInfo.FileName = Environment.SystemDirectory.ToString() + "''cmd.exe";
        _Process.StartInfo.Arguments = Environment.SystemDirectory.ToString() + "''" + UninstallDir;
        _Process.Start();
    }
    else
    {
        //string Path = ConstructPath(UninstallDir);
        _path = ConstructPath(UninstallDir);
        if (_path.Length > 0)
        {
            _Process.StartInfo.FileName = _path;
            _Process.StartInfo.UseShellExecute = false;
            _Process.Start();
        }
    }

如何使用c#通过调用该软件注册表文件中列出的软件卸载字符串来卸载该软件,但进程不起作用

尝试这种方法:

    Process p = new Process(); 
    p.StartInfo.FileName = "msiexec.exe"; 
    p.StartInfo.Arguments = "/x {F98C2FAC-6DFB-43AB-8B99-8F6907589021}/qn"; 
    p.Start(); 

请参阅此链接:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/msiexec.mspx?mfr=true

HTH。

您的misexec.exe代码的问题是运行cmd.exe someprogram.exe不会启动程序,因为cmd.exe不会执行传递给它的参数。但是,您可以通过使用/C开关告诉它,如下所示。在您的情况下,这应该有效:

    _Process.StartInfo.FileName = Environment.SystemDirectory.ToString() + "''cmd.exe";
    _Process.StartInfo.Arguments = "/C " + Environment.SystemDirectory.ToString() + "''" + UninstallDir;

我所做的只是在参数的开头添加/C(后面加一个空格)。然而,我不知道如何让你的rundll32.exe代码正常工作。

您的解决方案看起来不错,但在'qn:之前保留一个空格

p.StartInfo.Arguments = "/x {F98C2FAC-6DFB-43AB-8B99-8F6907589021} /qn"; 

否则它将无法在静音模式下工作。