c# - 创建新的 .Net Core 控制台进程 : Exception when using environment variables with UseShellExecute=true

标签 c# .net .net-core process console

我想从一个控制台运行多个 .Net Core 控制台应用程序。 我有以下代码:

        var startInfo = new ProcessStartInfo("c:\path\to\filename.exe", "arguments")
        {
            UseShellExecute = true,
            WorkingDirectory = "c:\working\directory",
        };
        var process = Process.Start(startInfo);

我收到以下异常:System.InvalidOperationException:“Process 对象必须将 UseShellExecute 属性设置为 false 才能使用环境变量。”

应用程序使用 WorkingDirectory 中的 appsettings.json 文件中的变量。

如何在单独的控制台中成功运行应用进程?

最佳答案

因为这是错误消息的最高搜索结果

The Process object must have the UseShellExecute property set to false in order to use environment variables

,在查看了 EnvironmentVariables 的引用资料后,我想我会加入一个观察。这里 并与 ProcessStartInfo内部支持变量的使用进行比较在这里。

很可能,您来到这里可能是因为您正坐在带有断点的 Visual Studio 前,试图找出使 UseShellExecute 正常工作的正确魔法。

如果您查看局部变量或即时窗口,或者序列化 ProcessStartInfo 类对象,或者基本上执行任何可能直接或间接访问 ProcessStartInfo.EnvironmentVariables 的操作,代码将实例化集合并填充它!然后,当您实际尝试启动该过程时,该方法的开始部分会将您的配置视为无效。

使 UseShellExecute 工作的唯一方法是确保 environmentVariables 支持字段保持为空,这样做意味着您不能以任何方式(直接或间接)访问它。

关于c# - 创建新的 .Net Core 控制台进程 : Exception when using environment variables with UseShellExecute=true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63536133/

相关文章:

c# - 反序列化 JSON 的更好方法?

c# - 多对多(自相关)特定订单 Entity Framework

c# - 标签云字号计算逻辑

.net - .Net 标准 2.0 中 System.Data.SqlClient.SqlConnection 类的替代方案

c# - 如何使用 Serilog 在异步方法上保持一致的标识符

c# - 基于操作系统的不同NuGet软件包

f# - 将 .net-Core F# 文件添加到 vscode 中的 F# 项目

c# - 将 JSON 反序列化为 List<T> 时出错

c# - 参数数量未知的 Func<>

c# - 使用 C# 创建自定义异常