Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试使用C运行命令#_C#_.net_Command Line - Fatal编程技术网

C# 尝试使用C运行命令#

C# 尝试使用C运行命令#,c#,.net,command-line,C#,.net,Command Line,我正试图编写一个程序,在我的工作中自动安装一些新电脑。其中一项任务是更改Windows 7的电源选项。我正在尝试运行一个命令,该命令导入电源配置文件并返回字符串输出,其中包含变量的GUID。当我运行程序时,它不会向字符串返回任何值。我肯定我把事情搞砸了,有人能帮忙吗?这是我的密码: if(chkPowerSettings.Checked == true && radioDesktop.Checked == true) { //Establi

我正试图编写一个程序,在我的工作中自动安装一些新电脑。其中一项任务是更改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);
        }

我不能评论。。。所以我把它作为一个答案贴了出来

开头带有@的字符串不需要双精度\。我在考虑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:\并且命令提示符不是管理员级别。至少这是我的理解。啊。。。我明白了,等我有机会的时候,我得在别的地方试一下