如果没有重新启动计算机立即进行注册表更改我发现使用
cmd.exe /c taskkill.exe /f /im explorer.exe & explorer.exe
正是我想做的事。
我知道您不能使用cmd.exe
这样的文件,而不是他们的全部路径,因为他们没有 PATH 值并且不存在 System32 文件夹。
const string explorer = @"C:\Windows\explorer.exe";
string taskkill = "", commandprompt = "";
var task1 = Task.Run(() =>
taskkill = Directory.GetDirectories(@"C:\Windows\WinSxS", "*microsoft-windows-taskkill_*")[0] + @"\taskkill.exe");
var task2 = Task.Run(() =>
commandprompt = Directory.GetDirectories(@"C:\Windows\WinSxS", "*microsoft-windows-commandprompt_*")[0] + @"\cmd.exe");
Task.WaitAll(task1, task2);
Process.Start(string.Format($"{commandprompt} /c {taskkill} /f /im {explorer} & {explorer}"));
但是运行这段代码会抛出
"The system cannot find the file specified"
如果有人可以帮我解决这个问题,我将不胜感激!
编辑#1 :
Process.Start(commandprompt, string.Format($"/c {taskkill} /f /im {explorer} & {explorer}"));
通过将代码更改为已应答,命令提示符仅针对第二个ans打开,例如" 请求无效"之后,浏览器窗口打开。
答案 0 :(得分:2)
您不必调用cmd.exe / c,您应该可以直接运行taskkill.exe。
这适用于我的机器(Windows 10)。您是否每次都需要搜索文件?我认为对于一个简单的实用程序应用程序,硬编码的路径应该没问题。
var startInfo = new ProcessStartInfo()
{
Verb = "runas",
Arguments = "/f /im explorer.exe",
FileName = @"c:\windows\system32\taskkill.exe"
};
var process = new Process { StartInfo = startInfo };
process.Start();
process.WaitForExit();
startInfo = new ProcessStartInfo()
{
Verb = "runas",
FileName = @"C:\windows\explorer.exe"
};
process = new Process { StartInfo = startInfo };
process.Start();
答案 1 :(得分:1)
如果要传递命令行参数,则需要使用Process.Start
{{1}}。