powershell - 使用 NSIS 检查已安装的 Windows Server 功能

标签 powershell nsis windows-server

我正在尝试在 Windows Server 2008R2、2008 和 2003 上安装自定义构建软件。该软件需要安装 Windows 的“桌面体验”功能。

我知道我可以在 2003 年和 2008 年使用 servermanagercmd.exe(尽管它有点麻烦)进行检查 - 不幸的是,这在 NSIS 安装程序中的 2008R2(64 位)中不再起作用 - 如果我只是运行命令它确实有效。从安装程序调用,我收到“servermanagercmd.exe 不被识别为内部或外部命令、可运行程序或批处理文件。”-错误,即使我将工作目录设置为 c:\windows\system32 (是的,在 64 位机器上,但 sysWOW64 中没有 servermanagercmd.exe)。
这是 NSIS 内部的代码行:

nsExec::ExecToStack 'servermanagercmd.exe -query | findstr "Desktop-Experience"'

在 2008R2 中,我认为情况实际上会有所改善,因为现在默认安装 PowerShell。但是,在尝试获取信息时,我需要首先在 PowerShell 中加载 ServerManager 模块 - 但该模块不可用于 Trusted Installer 读取。所以我再次面临同样的情况:如果我从命令行运行我的 powershell 命令,它可以工作,但不能从 NSIS 安装程序内部运行。
同样,这是 NSIS 中的代码行:
nsExec::ExecToStack 'powershell.exe "& "Import-Module ServerManager"'

三个(!)(双)引号实际上是正确的。

那么,有没有人知道如何从 NSIS 安装程序内部检查 Windows Server 2008R2 中是否安装了 Desktop-Experience(如果没有安装)?该解决方案不需要在 Server2003 或 2008 上工作,因为从 servermanagercmd.exe 解析的字符串在那里工作。

最佳答案

您是否使用 x64.nsh 中的宏来关闭 WOW64 重定向? (或使用“$windir\sysnative\servermanagercmd.exe”)

关于powershell - 使用 NSIS 检查已安装的 Windows Server 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503318/

相关文章:

powershell - Windows Service Recovery,无法执行PS脚本

windows - 32 位 NSIS 是否可以启动 64 位程序?

batch-file - 根据日期将 N 个文件保存在目录中的批处理文件

powershell - Powershell中的时间条件 'For'循环

c# - 如何使用 PowerShell 使用 C# DLL 中存在的类的新对象

64-bit - 如何检测安装了哪种 JRE——32 位与 64 位

flash - 如何使用 nsis 创建/自定义 Flash 等 Web 下载安装程序?

servicebus - Windows Server 的服务总线/SubscriptionDescription MessageCountDetails 属性全为零! (0 个)

scheduled-tasks - Window Server 2016 Datacenter 无法自动触发 Action

c# - PowerShell commandlet 被调用但没有响应