作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在常规 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
}
}
使用 corflags
和 ildasm
,我确保引用的 System.Management.Automation
DLL 是 v4.0 和 ILONLY
。即使我从 x64 shell(例如 PowerShell.exe
x64)调用我的应用程序,结果仍然指示 Is64BitProcess == false
。有什么提示吗?
这很重要,因为我想从嵌入式 session 中Add-PsSnapin
。如果位数不正确,则无法加载 SnapIn。
最佳答案
好吧,刚想通了。在项目属性中,如果我“强制”构建目标从 Any CPU
到 X64
,问题就解决了。嵌入式 PS session 正确显示位数为 64 位,并正确列出所有已注册的管理单元。
我仍然不知道为什么 Any CPU
不工作。可能是因为 Prefer 32-bit
复选框默认选中了 Any CPU
选项。
关于.net - 如何将 C# 应用程序中的嵌入式 PowerShell session 配置为 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29486291/
我是一名优秀的程序员,十分优秀!