【问题标题】:Test for Windows Features测试 Windows 功能
【发布时间】:2013-09-24 21:26:15
【问题描述】:

我有一个运行 CustomAction 的安装程序,它运行嵌入式 powershell 脚本来测试各种所需 Windows 功能的安装状态。这可以正常工作,但完成速度非常慢。

是否有替代方法来测试此类功能?我希望每个功能和子功能都有类似于注册表项的内容,但我没有找到任何关于该主题的文档。

【问题讨论】:

    标签: wix


    【解决方案1】:

    在其中一个安装项目中,我们使用dism.exe 来启用所需的 Windows 功能。

    例如,在 IIS 8 中启用 ASP.NET 是通过以下自定义操作完成的:

    <!-- 32-bit edition of Windows knows where to find dism.exe -->
    <Property Id="DISMEXEPATH" Value="dism.exe" />
    
    <!-- 64-bit edition of Windows requires this workaround to get proper dism.exe version -->
    <SetProperty Id="DISMEXEPATH" Value="[WindowsFolder]Sysnative\dism.exe" After="AppSearch">VersionNT64</SetProperty>
    
    <!-- And the CA to do the job (with the help of [quiet execution CA][2]) -->
    <CustomAction Id="SetForEnableAspNetIIS8" Property="EnableAspNetIIS8" Value="&quot;[DISMEXEPATH]&quot; /norestart /quiet /online /enable-feature /featurename:IIS-ApplicationDevelopment /featurename:IIS-ASPNET45 /featurename:IIS-NetFxExtensibility45 /featurename:NetFx4Extended-ASPNET45 /featurename:IIS-ISAPIExtensions /featurename:IIS-ISAPIFilter" />
    <CustomAction Id="EnableAspNetIIS8" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check"/>
    

    这似乎不是一个好的做法,但它适用于该项目。

    【讨论】:

    • 这很好,但如果没有提升的权限,它将无法工作。
    • @tmutton 安装程序通常以提升的权限运行
    • @JamesBarrass 并不总是自动的。用户未使用管理员帐户登录的实例就是一个实例。 Windows 通常会在运行前提示您。
    • 无论如何您都需要以管理员身份运行 dism.exe,因此需要提升权限
    【解决方案2】:

    我最终使用了一个(现已删除)建议来使用托管 DTF 自定义操作来查询 C# 中的服务器功能。

    [CustomAction]
    public static ActionResult CheckFeatures(Session session)
    {
        SelectQuery q = new SelectQuery("Win32_ServerFeature");
        ManagementObjectSearcher s = new ManagementObjectSearcher(q);
        foreach (ManagementObject e in s.Get())
        {
            if((UInt32)e["ID"] == FeatureId)
            {
                session["FeatureIsSet"] = "1";
            }
        }
    }
    
    <CustomAction Id="CACheck" BinaryKey="CA" DllEntry="CheckFeatures" 
    Execute="immediate" Return="check" />
    <Binary Id="CA" SourceFile="path/to/bin" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多