无法从 C# 应用程序访问批处理文件中的环境变量

Posted

技术标签:

【中文标题】无法从 C# 应用程序访问批处理文件中的环境变量【英文标题】:Not able to access environment variable in batch file from C# application 【发布时间】: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# Run programs and get environment variables after they run的可能重复 【参考方案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# 代码执行该批处理。

以上是关于无法从 C# 应用程序访问批处理文件中的环境变量的主要内容,如果未能解决你的问题,请参考以下文章

无法访问“database.yml”文件中的环境变量

从 C# 访问 C 全局变量 'errno'

仍然可以从 C# 中的另一个类访问私有变量

无法从 C# 中的控制台应用程序中读取配置文件

无法访问 Vue 文件脚本标签中的 CSS 变量

为啥即使使用 setlocal enabledelayedexpansion 也无法访问 for 循环(批处理文件)中的局部变量? [复制]