2013-09-24 178 views
0

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

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

回答

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" /> 
4

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

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

<!-- 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"/> 

这似乎不是一个很好的做法,但它的工作该项目。

+0

这很好,但如果没有提升权限,它将无法正常工作。 – tmutton

+0

@tmutton安装程序通常以提升的权限运行 –

+0

@JamesBarrass并不总是自动的。用户未使用管理员帐户登录的实例是一个实例。 Windows通常会在运行之前提示您。 – tmutton