我有一個運行CustomAction的安裝程序,它運行嵌入式PowerShell腳本來測試各種所需的Windows功能的安裝狀態。這工作正常,但它完成非常緩慢。測試Windows功能
是否有替代方法來測試這些功能?我希望每個功能和子功能都有一些註冊表項,但是我沒有找到關於這個主題的任何文檔。
我有一個運行CustomAction的安裝程序,它運行嵌入式PowerShell腳本來測試各種所需的Windows功能的安裝狀態。這工作正常,但它完成非常緩慢。測試Windows功能
是否有替代方法來測試這些功能?我希望每個功能和子功能都有一些註冊表項,但是我沒有找到關於這個主題的任何文檔。
我最終使用(現已刪除)的建議來使用受管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" />
在其中一個安裝項目中,我們使用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=""[DISMEXEPATH]" /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
@tmutton安裝程序通常以提升的權限運行 –
@JamesBarrass並不總是自動的。用戶未使用管理員帳戶登錄的實例是一個實例。 Windows通常會在運行之前提示您。 – tmutton