试图用c#运行命令
本文关键字:运行 命令 | 更新日期: 2023-09-27 18:19:09
我正在试着写一个程序,可以在我的工作中自动设置一些新电脑。其中一项任务是改变Windows 7的电源选项。我试图运行一个命令,导入电源配置文件,并返回包含GUID到变量的字符串输出。当我运行程序时,它没有返回任何值给我的字符串。我肯定我把什么东西搞砸了,有人能帮帮忙吗?下面是我的代码:
if(chkPowerSettings.Checked == true && radioDesktop.Checked == true)
{
//Establish the path to the power configuration file
string DesktopFileName = "WTCPowerDesktop.pow";
string CFGFileSource = @"''''ops-data''Apps''Builds";
string TargetPath = @"c:''";
//Creates the strings for the whole path
string source = System.IO.Path.Combine(CFGFileSource, DesktopFileName);
string destination = System.IO.Path.Combine(TargetPath, DesktopFileName);
//Copies the file, the true will overwrite any already existing file
System.IO.File.Copy(source, destination, true);
System.Diagnostics.ProcessStartInfo importCFG = new System.Diagnostics.ProcessStartInfo("cmd","/c" + "powercfg –import C:''WTCPowerDesktop.pow");
importCFG.RedirectStandardOutput = true;
importCFG.UseShellExecute = false;
importCFG.CreateNoWindow = false;
System.Diagnostics.Process runImport = new System.Diagnostics.Process();
runImport.StartInfo = importCFG;
runImport.Start();
string PowerCFGResult = runImport.StandardOutput.ReadToEnd();
MessageBox.Show(PowerCFGResult);
}
MSDN文档建议在读取完流后等待程序关闭
string DesktopFileName = "WTCPowerDesktop.pow";
string CFGFileSource = "''''ops-data''Apps''Builds";
string TargetPath = "c:''";
//Creates the strings for the whole path
string source = System.IO.Path.Combine(CFGFileSource, DesktopFileName);
string destination = System.IO.Path.Combine(TargetPath, DesktopFileName);
//Copies the file, the true will overwrite any already existing file
System.IO.File.Copy(source, destination, true);
System.Diagnostics.ProcessStartInfo importCFG =
new System.Diagnostics.ProcessStartInfo("powercfg",
string.Format("–import {0}", TargetPath))
{
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = false,
};
System.Diagnostics.Process runImport = new System.Diagnostics.Process(importCFG);
runImport.Start();
string PowerCFGResult = runImport.StandardOutput.ReadToEnd();
runImport.WaitForExit(); //Add this line--
MessageBox.Show(PowerCFGResult);
但是我不能自己测试,因为我没有你正在执行的应用程序。
更新:我刚刚注意到你使用@
和转义字符串("''"
)。这也是一个问题
我不能评论…所以我把它作为一个答案贴出来。
开头有@的字符串不需要双引号'。我正在考虑TargetPath变量,不知道前一个
http://msdn.microsoft.com/en-us/library/362314fe (v = vs.110) . aspx
如果我理解正确,您正在尝试从网络位置复制到C:驱动器,我认为这需要提高您的程序的权限。试着从e:'source复制到e:'dest
你不应该直接存储到C:' users ' username ' appdata,而应该直接存储到C:' users ' appdata。如果你选择写入到C:',那么你可能需要遵循这个如何强制my-net-app-to-run-as-administrator-on-windows-7并强制管理员权限。