首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过调用软件注册表文件中列出的软件UninstallString使用c#卸载软件,但该过程不起作用

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

Stack Overflow用户
提问于 2012-02-03 17:06:57
回答 3查看 6.4K关注 0票数 4

我正在开发一个软件,将列出所有的软件安装在计算机上现在我想卸载它使用我的程序在C#通过调用该软件的卸载键在注册表键我的程序是这样的,但过程不工作

代码语言:javascript
复制
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();
        }
    }
EN

回答 3

Stack Overflow用户

发布于 2012-02-03 17:45:16

尝试以下方法:

代码语言:javascript
复制
    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。

票数 2
EN

Stack Overflow用户

发布于 2015-07-25 05:38:43

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

代码语言:javascript
复制
    _Process.StartInfo.FileName = Environment.SystemDirectory.ToString() + "\\cmd.exe";
    _Process.StartInfo.Arguments = "/C " + Environment.SystemDirectory.ToString() + "\\" + UninstallDir;

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

票数 1
EN

Stack Overflow用户

发布于 2016-03-10 13:31:48

您的解决方案看起来不错,但在\qn之前要留点空间

代码语言:javascript
复制
p.StartInfo.Arguments = "/x {F98C2FAC-6DFB-43AB-8B99-8F6907589021} /qn"; 

否则它不会在静默模式下工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9126104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档