一时心血来潮,决定写个小程序自己用,实现定时关机,再也不用打开cmd计算好时间然后搜索那老记不住的命令。
当然简单的功能很快搞定,可是在用的时候发现了一个问题,就是button按下去后有时弹出来的不是关机窗口而是另外一个自身。
这个奇怪的问题一直弄不明白,今晚突然想起用IceSword监视他的进程创建情况,一看顿时明白了,原来我的程序叫shutdown.exe,而我调用系统关机命令也是shutdown,这样,你点button后他会执行你的程序而不是系统关机命令。
为什么会出现这个问题呢:因为操作系统对文件的搜索是这样的,当你输入一个文件名后,他首先会在当前路径搜索这个文件,如果找不到,他会搜索系统设定的路径,还找不到的话他会提示找不到。
呵呵,问题找到了,解决就很容易了。我上网搜了一下资料,几乎所有的程序好像都犯了这一个错误,常见的就是用调用cmd执行ping命令的例子(用到System.Diagnostics命名空间),这里给出我修订了的代码:
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine("%systemroot%\\system32\\ping " + ip); p.StandardInput.WriteLine("exit");
p.StandardOutput.ReadToEnd();
p.Close();
这样貌似还有一个问题,如果你在你当前目录有个cmd.exe那也就挂了,我试着将cmd加上绝对路径,但会报错,调试的时候提示找不到指定的文件,一直还不明白,期待高手出现。