【问题标题】:Why exe is not running in program files?为什么exe不在程序文件中运行?
【发布时间】:2012-11-21 20:17:02
【问题描述】:

我正在开发 wpf 应用程序。我正在使用以下代码运行 degrib.exe

 public static void GenerateCsvFile(string fileName)
        {
            try
            {
                MessageBox.Show("Csv Error");
                MessageBox.Show("File Name : " + fileName);
                MessageBox.Show("WorkingDirectory" + new FileInfo(fileName).DirectoryName);

                System.Diagnostics.Process process = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.FileName = @"C:\ndfd\degrib\bin\degrib.exe";
                startInfo.Arguments = @"" + fileName + "" + " -C -msg 1 -Csv";
                startInfo.UseShellExecute = true;
                startInfo.WorkingDirectory = new FileInfo(fileName).DirectoryName;
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
                process.Close();

                System.Diagnostics.Process process1 = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo1 = new System.Diagnostics.ProcessStartInfo();
                startInfo1.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo1.FileName = @"C:\ndfd\degrib\bin\degrib.exe";
                startInfo1.Arguments = @"" + fileName + "" + " -C -msg all -nMet -Csv";
                startInfo1.UseShellExecute = true;
                startInfo1.WorkingDirectory = new FileInfo(fileName).DirectoryName;
                process1.StartInfo = startInfo1;
                process1.Start();
                process1.WaitForExit();
                process1.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Degrib Error");
                Utility.ShowErrorMessage(ex);
            }
        }

degrib.exe 从 grib 文件生成 csv 文件。这里http://www.nws.noaa.gov/mdl/degrib/index.php是对degrib的解释。上面函数中fileName是grib文件的路径。如果 grib 文件放置在 Program Files 以外的任何文件夹中,则上述函数会从 grib 文件中创建 csv 文件。如果我将 grib 文件放在 Program Files 或 Program Files 中的任何其他文件夹中,相同的函数将不会生成 csv 文件。同样的功能也不适用于 AppData 文件夹。为什么会这样?能否请您针对上述问题提供任何解决方案?

【问题讨论】:

  • 用户权限。以管理员身份运行进程。
  • 你必须向写 degrib 的人询问这个问题...
  • @leppie:据我所知,AppData 即使没有管理员权限也必须工作。
  • 您是否使用过procmon 等工具来确定进程是否已启动?
  • 大多数程序都有一个参数可以让你设置输出路径,也许 grib 也有。在比 Vista 更新的 Windows 中,ProgramFiles 不是您应该更改或存储数据的地方(顺便说一句。早在 Vista 之前,MS 就建议不要使用此位置)

标签: c# exe system.diagnostics grib


【解决方案1】:

默认情况下,VistaWin7 中的 UAC 不会授予应用程序在 Program Files 中的写入权限,除非它们以提升的访问权限启动。 您可以通过添加:

startInfo.Verb = "runas";

但是,阅读degrib 手册我注意到它接受输入和输出参数。 因此,在您的情况下,建议您为生成的 csv 文件使用预定义的位置。 http://www.nws.noaa.gov/mdl/degrib/txtview.php?file=degrib.txt&dir=base

   -in [File]
     You can provide the file to read the GRIB message from either:
     1) right after "degrib",
     2) using the "-in [File]" option,
     3) on standard input.
   -out [File]
      Name of the file to store the results.  Must have 1 and only 1 dot in
      the name, and the extension must be 3 characters.  The extension will
      be replaced depending on file format.
   -namePath [Path]
      Name of a directory to put the files in.
      Only applicable if -out is NOT Specified.

【讨论】:

  • 我将 windows xp 作为操作系统
  • Windows xp 有类似的行为,除了权限编辑默认隐藏的事实。转到工具>文件夹选项>查看并取消选中“使用简单文件共享[推荐]”。检查您的 WPF 应用是否具有写入权限。
  • 未选中“使用简单文件共享[推荐]”。我的 WPF 应用程序具有写入权限。我正在成功地对 Application Data 文件夹中的其他文件执行写操作。我能够在 Application Data 文件夹中执行所有必需的功能。我只是无法使用上述功能对 grib 文件进行解密
  • 如果您的应用在 Application Data 中具有写入权限但 degrib.exe 没有,您可以通过直接在 degrib 文件夹中生成 csv 文件并使用 System.IO.File 将其移动到 AppData 文件夹来绕过此操作.Move(源文件,目标文件)。这不是最佳解决方案,但它会帮助您完成工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多