有沒有辦法在不提示用戶的情況下安裝ClickOnce應用程序?我正在談論用戶第一次運行應用程序時的「運行/不運行」。如何在不提示用戶的情況下安裝ClickOnce應用程序?
似乎有一些線索here,但我相信它是關於跳過「海拔」(UAC)和安全提示,而不是實際的初始「運行/不運行」屏幕。
我只能找到有關如何靜默更新過去安裝的應用程序的信息,但沒有關於第一次靜默安裝應用程序的信息。
我還發現this post,這似乎是相關的,但同樣,如果我們談論同樣的用戶提示不知道......
有沒有辦法在不提示用戶的情況下安裝ClickOnce應用程序?我正在談論用戶第一次運行應用程序時的「運行/不運行」。如何在不提示用戶的情況下安裝ClickOnce應用程序?
似乎有一些線索here,但我相信它是關於跳過「海拔」(UAC)和安全提示,而不是實際的初始「運行/不運行」屏幕。
我只能找到有關如何靜默更新過去安裝的應用程序的信息,但沒有關於第一次靜默安裝應用程序的信息。
我還發現this post,這似乎是相關的,但同樣,如果我們談論同樣的用戶提示不知道......
有沒有辦法不提示用戶安裝一個ClickOnce應用程序。如果您希望用戶能夠雙擊它,並且僅在未經用戶驗證的情況下安裝,則不要使用ClickOnce。坦率地說,根據我的經驗,只有在企業環境中使用SMS推送的惡意軟件和軟件包纔會在沒有任何提示的情況下安裝。
如何創建自定義ClickOnce安裝程序? http://msdn.microsoft.com/en-us/library/dd997001.aspx
更新的鏈接(2016年10月6日)
Walkthrough: Creating a Custom Installer for a ClickOnce Application
引用的解決方案效果很好。爲了防止鏈接消失,它使用InPlaceHostingManager類來下載清單,斷言應用程序需求然後下載(安裝)應用程序。 –
有可能避免「運行」 /「不要運行」的提示,但你仍然有實際在複製文件的問題給用戶,這通常需要他們通過鏈接啓動.application。但是,您可能可以通過登錄腳本或其他方式啓動它。可能你已經以某種方式解決了這個問題,因爲它暗示在你的問題中。你鏈接到的另一個問題圍繞着這個問題懸停,但它並不能真正幫助你。
我知道你可以繞過「運行」/「不要運行」提示,因爲我只是成功地使用了ClickOnce,我們將它作爲自定義shell的自定義shell部署。關鍵在於ClickOnce必須由受信任的發佈者簽名。如果您在客戶機上配置了正確的東西,那麼即使是自簽名也沒問題。
因此,讓網絡管理員推出一個組策略,信任用於簽署應用程序的代碼簽名證書。有一個關於如何做到這一點,在這裏的TechNet信息:http://technet.microsoft.com/en-us/library/cc770315(v=WS.10).aspx,轉載這裏簡單介紹一下:
打開組策略管理控制檯。
查找現有的或創建新的GPO以包含證書設置。確保GPO與您希望受策略影響的用戶的域,站點或組織單位相關聯。
用鼠標右鍵單擊該GPO,然後選擇編輯。組策略管理編輯器打開,並顯示策略對象的當前內容。
在導航窗格中,打開Computer Configuration \ Windows Settings \ Security Settings \ Public Key Policies \ Trusted Publishers。
單擊操作菜單,然後單擊導入。
按照證書導入嚮導中的說明查找並導入證書。
如果證書是自簽名的,並且無法追溯到受信任的根證書頒發機構證書存儲中的證書,則還必須將該證書複製到該存儲。在導航窗格中,單擊「受信任的根證書頒發機構」,然後重複步驟5和6以將證書的副本安裝到該存儲。
除了MikeBazs回答,我想提供下面的「變通辦法」,這使的點擊,一旦-申請「非互動」和「近乎無聲」(用戶看到進步的安裝-window在安裝過程中,無需點擊和/或可能)
有幾個「問題」的考慮,但如果按照本指南中,結果應該是你所需要的:
1)在您的應用程序中籤名:在Visual Studio中,您可以使用自己的證書輕鬆簽署您的應用程序,這不是什麼大問題應對。
2)分發證書:爲了避免該對話框中,如果要安裝該應用程序,您需要將證書分發到以下商店上的任何機(使用GPO爲):Trusted Publishers
和Trusted Root Certification Authorities
現在,用戶只需點擊一下即可安裝應用程序 - 無需擔心任何安全問題。但是,我們希望零點擊:
3)創建一個PowerShell腳本,位於服務器上,它調用應用程序的SETUP.EXE:
if (-not (Test-Path env:APPInstalled)){
Start-Process "\\server\share\Application\setup.exe"
# Set Flag for "Installed"
[Environment]::SetEnvironmentVariable("APPInstalled", "1", "User")
}
我用一個用戶環境變量稱爲APPInstalled
以確定應用程序是否需要安裝。
現在,用戶可以執行該腳本,只需安裝一次,無需進一步確認。但是應用程序在安裝後啓動。
4.)修改您的應用程序的源代碼:我使用了一個虛擬文件來檢測應用程序的第一層。如果是firstrun(即正確安裝後)我再次將它關閉:
private void Form1_Load(object sender, EventArgs e)
{
//first run? That's a initial deployment, close application.
if (!File.Exists("C:\\some\\static\\path\\notfirstrun.dat"))
{
File.WriteAllText("C:\\some\\static\\path\\notfirstrun.dat", "1");
Application.Exit();
}
現在,用戶可以執行thaht腳本,只是不需要進一步確認收到一旦安裝和應用程序不安裝後「自動啓動」。
但我們要避免「點擊」以及:
如果我們設置在啓動文件夾中的PowerShell腳本 - 它彈出,這是醜陋的。如果我們將它設置爲登錄腳本,它不會在用戶上下文中運行,這對於Click-Once是必需的。
作爲解決「這個」問題的一種解決方法,您可以將其封裝在vbs
腳本中,調用powershell腳本。請注意,這是在用戶上下文中執行,因此用戶需要權限執行PowerShell的腳本:
Dim objShell
Set objShell=CreateObject("WScript.Shell")
strCMD="powershell.exe -sta -noProfile -NonInteractive -nologo -ExecutionPolicy Bypass -f \\server\share\scripts\install_App.ps1"
objShell.Run strCMD,0,True
最後,使用GPO中運行「任務調度器」來創建一個「任務」 vbs
-script登錄後30秒,僅當用戶登錄時。
所有用戶都會看到的是「安裝」進度。
一言以蔽之:
感謝羅賓,這幾乎是我的研究向我展示的。這確實是一個要在我的企業環境中部署的軟件包。這是我希望我的員工隨時可以運行的東西,因此無聲安裝是首選。 – Joe
無提示安裝對網絡管理員編寫腳本以部署給用戶也有幫助。 – Mike
當我的答案是準確的時候,這似乎不公平 - 只是因爲你不喜歡答案。 – RobinDotNet