3

我正在尝试编写一个程序,该程序将在我的工作中为新计算机自动进行一些设置。其中一项任务是更改 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);
        }
4

4 回答 4

2

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);

但是我无法自己测试,因为我没有您正在执行的应用程序。

更新:我刚刚注意到您使用@和转义了字符串 ( "\\")。这也可能是个问题

于 2013-06-20T15:08:14.893 回答
0

我无法发表评论...所以我将其发布为答案。

以@开头的字符串不需要双\。我在考虑 TargetPath 变量,不知道前一个。

http://msdn.microsoft.com/en-us/library/362314fe(v=vs.110).aspx

于 2013-06-20T14:52:54.743 回答
0

如果我理解正确,您正在尝试从网络位置复制到 C: 驱动器,我认为这需要提升您的程序的权限。尝试出于测试目的从 e:\source 复制到 e:\dest

于 2013-06-20T15:09:53.620 回答
0

如果您确实选择写入 C:\,则不应直接存储到 C:\ 而是 C:\Users\Username\AppData,那么您可能需要遵循这个how-to-force-my-net-app-to- run-as-administrator-on-windows-7并强制管理员权限。

于 2013-06-20T15:25:08.967 回答