使用 C# 执行 UninstallString [英] Executing UninstallString using C#

查看:62
本文介绍了使用 C# 执行 UninstallString的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用 process 执行 uninstallString 时遇到问题,它在所有情况下都不起作用.我需要一个在任何情况下都能运行的通用程序.

I have a problem to execute uninstallString using process, it won't work in all cases. I need a generic procedure that will run in any case.

  • 我的一个想法是解析卸载字符串

代码:

int indexOfExe = uninstallString.ToLower().IndexOf(".exe") + 4;
string exeFile = uninstallString.Substring(0, indexOfExe).Trim();
string args = uninstallString.Substring(indexOfExe, uninstallString.Length - indexOfExe).Trim();

if (args.Length > 0)
{
    procStartInfo.FileName = exeFile;
    procStartInfo.Arguments = args;
}
else
{
    procStartInfo.FileName = exeFile;
    procStartInfo.Arguments = "";
}

procStartInfo.Verb = "runas";
procStartInfo.CreateNoWindow = true;
procStartInfo.UseShellExecute = false ;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();

  • 我的第二个想法是:
  • 代码:

    if (uninstallString.Contains("msiexec"))
    {
        uninstallString = uninstallString.Replace("\"", "");
        uninstallString = RegistryHandler.getCommandInCommaAndArgumentsOutside(uninstallString);
    }
    else
    {
        procStartInfo.FileName = "cmd";
    
        string[] words = uninstallString.Split("/".ToCharArray());
    
        if (uninstallString.StartsWith(@"""") && words.Count() == 1)
        {
            procStartInfo.FileName = uninstallString;
            procStartInfo.Arguments = "";
        }
        else
        {
            //procStartInfo.Arguments = "/c " + "\"" + uninstallString + "\"";
            if ((uninstallString.StartsWith(@"""") && words.Count() > 1))
            {
                procStartInfo.Arguments = "/c " + uninstallString;
            }
            else
            {
                procStartInfo.Arguments = "/c " + RegistryHandler.getCommandInCommaAndArgumentsOutsideByExe(uninstallString);
            }
        }
    }
    

    但仍不能涵盖所有情况.

    but still it won't cover all cases.

    所有情况的通用解决方案是什么?

    What is the generic solution for all cases?

    推荐答案

    //i wrote this code, which is working in most of the cases :
    
    //----------------------------------------------------------------------------------------------          
    
                if (uninstallString.Contains("msiexec"))
                    {
                    uninstallString = uninstallString.Replace("\"", "");
                    uninstallString = RegistryHandler.getCommandInCommaAndArgumentsOutside(uninstallString);
                    }
                    else
                    {
                      if (uninstallString.StartsWith(@""""))
                         {
                         int indexOfLastComma = uninstallString.IndexOf("\"", 1) + 1;
                         procStartInfo.FileName = uninstallString.Substring(0, indexOfLastComma);
                         procStartInfo.Arguments = uninstallString.Substrin(indexOfLastComma,uninstallString.Length - indexOfLastComma));
    
                         }
                         else
                         {
                          procStartInfo.FileName = "cmd.exe";
                          procStartInfo.Arguments = "/c " + RegistryHandler.getCommandInCommaAndArgumentsOutsideByExe(uninstallString); 
                          }     
    }
    
    //----------------------------------------------------------------------------------------------
    
    
              public static string getCommandInCommaAndArgumentsOutsideByExe(string command)
                     {
                       int ind = 0;
                       string[] prms = command.Split(' ');
    
                       ind = prms[0].Length; //command.IndexOf(".exe") + 4;
    
                       int exeLocationIndex = command.IndexOf(".exe") + 4;
                       string cmd = command.Substring(0, exeLocationIndex);
                       string arguments = command.Substring(command.IndexOf(".exe") + 4, command.Length - exeLocationIndex);
    
                       return "\"" + cmd + "\"" + arguments;
                           }
    

    这篇关于使用 C# 执行 UninstallString的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆