Как удалить Программное обеспечение с помощью 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";
В противном случае он не будет работать в беззвучном режиме.