.net - 如何将 C# 应用程序中的嵌入式 PowerShell session 配置为 64 位

标签 .net windows powershell automation

在常规 PowerShell 窗口中,可以确定当前 shell 是 x64 还是 x86 by examining the boolean environment variable [Environment]::Is64BitProcess .

现在我做了同样的事情,但从 .NET 应用程序中的嵌入式 PS session 开始。并且输出显示位数不是 64 位。

static void Main(string[] args)
{
    using (PowerShell ps = PowerShell.Create())
    {
        foreach (var res in ps
            .AddScript("$host.version.tostring()").AddStatement()
            .AddScript("[Environment]::Is64BitProcess").AddStatement()
            .Invoke())
        {
            Console.WriteLine(res.BaseObject);
        }

        // Outputs:
        // 4.0
        // False
    }
}

使用 corflagsildasm,我确保引用的 System.Management.Automation DLL 是 v4.0 和 ILONLY。即使我从 x64 shell(例如 PowerShell.exe x64)调用我的应用程序,结果仍然指示 Is64BitProcess == false。有什么提示吗?

这很重要,因为我想从嵌入式 session 中Add-PsSnapin。如果位数不正确,则无法加载 SnapIn。

最佳答案

好吧,刚想通了。在项目属性中,如果我“强制”构建目标从 Any CPUX64,问题就解决了。嵌入式 PS session 正确显示位数为 64 位,并正确列出所有已注册的管理单元。

enter image description here

我仍然不知道为什么 Any CPU 不工作。可能是因为 Prefer 32-bit 复选框默认选中了 Any CPU 选项。

关于.net - 如何将 C# 应用程序中的嵌入式 PowerShell session 配置为 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29486291/

相关文章:

C# 打开虚拟串口抛出 ArgumentException

powershell - 将 .vhd 镜像从 Azure 下载到本地计算机,然后上传到另一个 Azure 帐户

php - PHP 的 fopen 和 fwrite 的 VB.NET 版本是什么(如果存在)?

windows - 写输出-InputObject(,'Test')-NoEnumerate

python - 如何在 Windows 中使用 Conda 抑制 __pycache__ 创建

powershell - 我无法使用 Powershell StartsWith 函数

powershell - 如何使用7-zip压缩目录中的所有文件?

c# - if (false == true) 在内部抛出异常时执行 block

java - 安全发布和初始化安全在 .NET 中是否有效?

c# - Entity Framework : TransactionScope has a different IsolationLevel