簡體   English   中英

啟動條件阻止靜默安裝(Application + .Net Framework)

[英]Launch condition prevents silent installation (Application + .Net Framework)

我已在我的Visual Studio 2013中的應用程序中添加了安裝程序部署項目,以為我的應用程序生成一個安裝向導,並為提供靜默安裝生成一個Setup.msi -File。

執行msiexec /i "<PathToSetupDirectory>\\Setup.msi" /qb! 可以正常工作。 我的應用程序已靜默安裝。 但是我的C#-Application依賴於.Net-Framework 4.5.1。 如果未安裝,則會出現啟動條件:

此設置需要.NET Framework版本VersionNumber。 請安裝.NET Framework,然后再次運行此安裝程序。 可以從Web獲得.NET Framework。 您現在要這樣做嗎?

當然,我不會這樣做。 這應該會自動工作。

因此,我在Setup Deployment Project (right click) => Properties => Prerequisites...選擇了框架Setup Deployment Project (right click) => Properties => Prerequisites... ,選中“從與我的應用程序相同的位置下載先決條件”,並添加了NDP451-KB2858728-x86-x64-AllOS-ENU.exe到目錄C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\Bootstrapper\\Packages\\DotNetFX451

我的希望是,如果尚未安裝框架,Setup.msi不會顯示啟動條件的消息。 它應該只安裝.Net Framework和應用程序后記,而無需任何用戶交互。 但是它仍然顯示出來。 No(否)會導致退出安裝。 導致打開瀏覽器並退出安裝。

當然,如果需要,我可以編寫bash腳本以靜默方式安裝.Net Framework並最終開始以靜默方式安裝我的應用程序。 但是我想實現這種“正確的方法” 我有種錯過的感覺。

有任何想法嗎?

MSI安裝程序也不能安裝.NET Framework,主要是因為MSI安裝程序不能遞歸安裝其他MSI安裝程序(NET FW)。 這是在MSI文件之前必須安裝許多先決條件的原因之一,VS安裝程序為此使用setup.exe。

據我所知,setup.exe引導程序沒有靜默選項,但這是因為許多先決條件沒有靜默安裝。 曾經有一個工具(Bootstrap清單生成器),您可以使用該工具來更改嵌入式文件,該嵌入式文件包含用於使其靜默的前提條件的命令行安裝:

https://msdn.microsoft.com/en-us/library/ms165429.aspx

因此這可能仍然是一種選擇。

另一個選擇是使用WiX引導程序工具“ Burn”創建一個捆綁包,該捆綁包將以靜默方式安裝框架,然后安裝MSI。 它基本上是Xml驅動的依賴項和MSI文件的規范。

感謝PhilDW澄清此主題。 很高興知道這對於msi文件是不可能的。 我已經閱讀了有關WiX引導程序工具“ Burn”和Bootstrap清單生成器的信息,並得出了編寫簡單批處理文件的結論。 這將檢測是否安裝了.Net Framework 4.5.1或更高版本-如果未安裝,則會自動安裝。 之后,靜默msi-install開始。

silent_install.cmd

@echo off
set forceNetFrameworkInstall=true

echo Starting silent installation of Setup.msi and its prerequisites ...

REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release
if %ERRORLEVEL% EQU 0 (goto CHECK) else (goto INSTALL_DOTNET)

:CHECK
for /f "tokens=2*" %%a in ('REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release') do set "releaseKeyHex=%%b"
set /A releaseKeyDec=%releaseKeyHex%
if %releaseKeyDec% GEQ 378675 set forceNetFrameworkInstall=false
if %forceNetFrameworkInstall% == true (
    echo Prerequisite: .Net Framework 4.5.1 or later version not detected
    goto INSTALL_DOTNET
) else (
    echo .Net Framework 4.5.1 or later version detected
    goto INSTALL_APP
)

:INSTALL_DOTNET
echo Installing .Net Framework 4.5.1 ...
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-ENU.exe /passive /norestart
echo Installing .Net Framework 4.5.1 Language Pack (German) ...
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-DEU.exe /passive /norestart
goto INSTALL_APP

:INSTALL_APP
echo Installing Application ...
msiexec /i %~dp0\Setup.msi /qb!
exit

該腳本讀取當前安裝的.Net Framework(v4.X)的十六進制發布密鑰,並將該密鑰解析為十進制數字,然后將其與首選.Net Framework的最小發布密鑰數字進行比較。 在這里,您將找到這些可能值的列表: 檢測.NET Framework (值越高,.Net Framework版本越高)。

該腳本應位於以下目錄樹中:

|- setup.exe
|- Setup.msi
|- silent_install.cmd
|+ DotNetFX451
   |- NDP451-KB2858728-x86-x64-AllOS-DEU.exe
   |- NDP451-KB2858728-x86-x64-AllOS-ENU.exe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM