gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:58:47 27 4
gpt4 key购买 nike

在常规 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com