Как удалить Программное обеспечение с помощью C#, вызвав Software UninstallString, указанный в реестре этого программного обеспечения, но процесс не работает

Я занимаюсь разработкой программного обеспечения, в котором будет перечислено все программное обеспечение, установленное на компьютере, и теперь я хочу удалить его, используя мою программу на 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();
        }
    }

3 ответа

Попробуйте этот подход:

    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

НТН.

Проблема с вашим 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"; 

В противном случае он не будет работать в беззвучном режиме.

Другие вопросы по тегам