2017-09-27 103 views
0

我已經在Visual Studio 2013中爲我的應用程序添加了一個安裝部署項目,以便爲我的應用程序生成安裝嚮導,並生成一個Setup.msi -File用於提供靜音安裝。啓動條件防止靜默安裝(Application + .Net Framework)

執行msiexec /i "<PathToSetupDirectory>\Setup.msi" /qb!按預期工作。我的應用程序默默安裝。但我的C#應用​​程序依賴於.Net-Framework 4.5.1。如果未安裝,則啓動條件提高:

此安裝程序需要.NET Framework版本VersionNumber。請安裝.NET Framework並再次運行此安裝程序。 .NET Framework可以從Web獲得。你想現在就做這個嗎?

當然我不喜歡這樣做。這應該自動工作。

所以我選擇的框架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和應用程序後續字符,而無需任何用戶交互。但它仍然顯示出來。按導致退出安裝。按是的導致打開瀏覽器並退出安裝。

當然,我可以編寫一個bash腳本,在必要時默默安裝.Net Framework,並最終啓動我的應用程序的靜默安裝。但我想實現這個「正確的方式」。我有這種感覺,我錯過了 的東西。

任何想法?

+0

我已經試過了圖形化設置界面(SETUP.EXE)。在這裏可以很好地工作(與用戶交互):*安裝.Net =>重新啓動PC =>應用程序安裝*。所以看起來我在Visual Studio中的配置是正確的。但是,我真的必須編寫一個bash腳本來實現msi文件的無提示安裝嗎? – rweisse

回答

0

Thx to PhilDW爲了明確這個話題。很高興知道這對於msi文件是不可能的。我已經閱讀了關於WiX引導程序工具「Burn」和Bootstrap Manifest Generator,並得出結論來編寫一個簡單的批處理文件。這將檢測.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(4.x版)的發佈六角密鑰和分析此鍵爲十進制數,並將其與最小的版本進行比較首選的關鍵號碼.Net Framework。在這裏您可以找到這些可能值的列表:Detecting the .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 
1

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

據我所知,setup.exe引導程序沒有靜默選項,但那是因爲許多先決條件沒有安靜安裝。曾經有一個工具(引導清單生成器),你可以用它來改變包含在命令行中嵌入的文件安裝先決條件,使他們沉默:

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

,這樣仍可能是一種選擇。

另一種選擇是使用WiX引導工具「Burn」創建一個捆綁軟件,然後安裝框架,然後默認安裝MSI。它基本上是一個Xml驅動的依賴關係和你的MSI fil規範。

+0

謝謝!我會明天嘗試,讓你保持最新! – rweisse