【问题标题】:Not able to access environment variable in batch file from C# application无法从 C# 应用程序访问批处理文件中的环境变量
【发布时间】:2018-11-18 02:56:38
【问题描述】:

我有一个批处理文件,我正在尝试访问环境变量。如果我只是单击它并运行它就能够获取该变量,但是当我从 C# 代码运行它时,它无法访问环境变量并显示为空白。

例如在批处理中说它的书面 - echo %ENV_VAR_NAMe% 如果我只是单击批处理,这将起作用。但从 c# 代码中它显示为空白。 C#代码如下。请帮忙

      try
        {
            myProcess.StartInfo.FileName = exe;
            myProcess.StartInfo.UseShellExecute = true;
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.StartInfo.ErrorDialog = false;
            myProcess.StartInfo.WorkingDirectory = 
            Path.GetDirectoryName(exe);
            myProcess.Start();  
            myProcess.WaitForExit();
            myProcess.Close();
            return true;

        }
        catch (Exception e)
        {
            return false;
        }

【问题讨论】:

  • 我没有看到您在代码中访问环境的位置
  • 您的 C# 代码是作为您的用户运行,还是作为其他用户作为某些计划任务的一部分运行?这可以解释差异。
  • 它在批处理文件“exe”代码中的变量名将是批处理文件的路径,如 D:\\Test\\BatchFileName.bat 和 echo %ENV_VAR_NAMe% 写入批处理文件.
  • 我会说它以用户身份运行,但在单击批处理时它能够访问环境。变量而不是来自代码

标签: c# batch-file cmd environment-variables command-prompt


【解决方案1】:

为什么不使用Environment.GetEnvironmentVariable()

using System; 
using System.IO; 
public class Example 
{ 
    public static void Main() 
    { 
        // Change the directory to %WINDIR%
        Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir"); 
        DirectoryInfo info = new DirectoryInfo(".");
        Console.WriteLine("Directory Info: " + info.FullName); 
    } 
} 

// The example displays output like the following: // Directory Info: C:\windows

MSDN

【讨论】:

  • 您的第一个问题实际上很不清楚。知道它是如何工作的有什么改变?
  • 感谢@Arnaud F. 的帮助。我给出的 cmd 代码示例只是一小部分。我需要它在批次本身。不能改变它。这就是为什么我不尝试访问环境。使用 C# 代码的变量
  • 我可以在批处理文件中添加额外的代码,但我不能删除部分批处理,这是这里的条件,我正在尝试使用 c# 代码执行该批处理。
猜你喜欢
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
相关资源
最近更新 更多