C# 尝试使用C运行命令#
我正试图编写一个程序,在我的工作中自动安装一些新电脑。其中一项任务是更改Windows 7的电源选项。我正在尝试运行一个命令,该命令导入电源配置文件并返回字符串输出,其中包含变量的GUID。当我运行程序时,它不会向字符串返回任何值。我肯定我把事情搞砸了,有人能帮忙吗?这是我的密码:C# 尝试使用C运行命令#,c#,.net,command-line,C#,.net,Command Line,我正试图编写一个程序,在我的工作中自动安装一些新电脑。其中一项任务是更改Windows 7的电源选项。我正在尝试运行一个命令,该命令导入电源配置文件并返回字符串输出,其中包含变量的GUID。当我运行程序时,它不会向字符串返回任何值。我肯定我把事情搞砸了,有人能帮忙吗?这是我的密码: if(chkPowerSettings.Checked == true && radioDesktop.Checked == true) { //Establi
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);
}
我不能评论。。。所以我把它作为一个答案贴了出来 开头带有@的字符串不需要双精度\。我在考虑TargetPath变量,不知道前一个变量
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);
但是,我无法亲自测试,因为我没有您正在执行的应用程序
更新:我刚刚注意到您使用了
@
和转义字符串(“\\”
)。这也可能是一个问题如果我理解正确,您试图从网络位置复制到C:drive,我认为您的程序需要提升权限。出于测试目的,尝试从e:\source复制到e:\dest您不应该直接存储到C:\而是存储到C:\Users\Username\AppData如果您选择写入到C:\则可能需要遵循此操作并强制管理员权限。您确定输出是在stdout而不是stderr上吗?我刚刚尝试将.StandardOutput更改为.StandardError只是为了看看这是否会返回任何内容,它只是返回了一个异常。为什么不使用提供的选项来传递Guid
?也就是说,在代码中生成一个,运行命令,完成后,您已经知道正确的值是多少POWERCFG-IMPORT
第二个启动参数中的“/c”
和“power”
之间没有空格。我很好奇你为什么要在那里集中注意力。我刚刚添加了空格,谢谢你。但是,我的消息框仍然不返回任何内容。我尝试删除非必需的,但我的消息框仍然不返回任何内容。PowerCFGResult是一个字符串,没有放置.WaitForExit()的选项;之后我尝试放置一个runImport.WaitForExit();在字符串声明之前,这也不起作用。您也可以尝试直接执行命令,而不是通过命令提示符。我已经尝试了更新,但我的消息框仍然没有返回任何内容。不过我很感谢你的帮助。我想用这个方法把命令行输出到字符串中,我的想法对吗?我刚才看到了你关于直接执行命令的评论,你能给我介绍一下如何执行的教程吗?我找到了一个教程,告诉我如何这样做。对不起,我在这方面有点生疏。是的,根据调查,你做的每件事都是正确的。我猜命令端有些东西不工作。文件复制正确,我已经验证过了。我有管理员权限,所以这不是这里的问题,但谢谢你。文件拷贝很好,我没有文件拷贝的权限问题,这是我首先关心的问题之一,但我确保文件拷贝很好。我真的只是指出了文件应该存储在哪里的抗议;管理员链接是关于从程序内部运行命令提示符。我不相信它会读取该文件,因为它位于C:\并且命令提示符不是管理员级别。至少这是我的理解。啊。。。我明白了,等我有机会的时候,我得在别的地方试一下