2013-02-06 76 views
5

有沒有辦法在不提示用戶的情況下安裝ClickOnce應用程序?我正在談論用戶第一次運行應用程序時的「運行/不運行」。如何在不提示用戶的情況下安裝ClickOnce應用程序?

似乎有一些線索here,但我相信它是關於跳過「海拔」(UAC)和安全提示,而不是實際的初始「運行/不運行」屏幕。

我只能找到有關如何靜默更新過去安裝的應用程序的信息,但沒有關於第一次靜默安裝應用程序的信息。

我還發現this post,這似乎是相關的,但同樣,如果我們談論同樣的用戶提示不知道......

回答

2

有沒有辦法不提示用戶安裝一個ClickOnce應用程序。如果您希望用戶能夠雙擊它,並且僅在未經用戶驗證的情況下安裝,則不要使用ClickOnce。坦率地說,根據我的經驗,只有在企業環境中使用SMS推送的惡意軟件和軟件包纔會在沒有任何提示的情況下安裝。

+0

感謝羅賓,這幾乎是我的研究向我展示的。這確實是一個要在我的企業環境中部署的軟件包。這是我希望我的員工隨時可以運行的東西,因此無聲安裝是首選。 – Joe

+0

無提示安裝對網絡管理員編寫腳本以部署給用戶也有幫助。 – Mike

+0

當我的答案是準確的時候,這似乎不公平 - 只是因爲你不喜歡答案。 – RobinDotNet

6

有可能避免「運行」 /「不要運行」的提示,但你仍然有實際在複製文件的問題給用戶,這通常需要他們通過鏈接啓動.application。但是,您可能可以通過登錄腳本或其他方式啓動它。可能你已經以某種方式解決了這個問題,因爲它暗示在你的問題中。你鏈接到的另一個問題圍繞着這個問題懸停,但它並不能真正幫助你。

我知道你可以繞過「運行」/「不要運行」提示,因爲我只是成功地使用了ClickOnce,我們將它作爲自定義shell的自定義shell部署。關鍵在於ClickOnce必須由受信任的發佈者簽名。如果您在客戶機上配置了正確的東西,那麼即使是自簽名也沒問題。

因此,讓網絡管理員推出一個組策略,信任用於簽署應用程序的代碼簽名證書。有一個關於如何做到這一點,在這裏的TechNet信息:http://technet.microsoft.com/en-us/library/cc770315(v=WS.10).aspx,轉載這裏簡單介紹一下:

  1. 打開組策略管理控制檯。

  2. 查找現有的或創建新的GPO以包含證書設置。確保GPO與您希望受策略影響的用戶的域,站點或組織單位相關聯。

  3. 用鼠標右鍵單擊該GPO,然後選擇編輯。組策略管理編輯器打開,並顯示策略對象的當前內容。

  4. 在導航窗格中,打開Computer Configuration \ Windows Settings \ Security Settings \ Public Key Policies \ Trusted Publishers。

  5. 單擊操作菜單,然後單擊導入。

  6. 按照證書導入嚮導中的說明查找並導入證書。

  7. 如果證書是自簽名的,並且無法追溯到受信任的根證書頒發機構證書存儲中的證書,則還必須將該證書複製到該存儲。在導航窗格中,單擊「受信任的根證書頒發機構」,然後重複步驟5和6以將證書的副本安裝到該存儲。

1

除了MikeBazs回答,我想提供下面的「變通辦法」,這使的點擊,一旦-申請「非互動」和「近乎無聲」(用戶看到進步的安裝-window在安裝過程中,無需點擊和/或可能)

有幾個「問題」的考慮,但如果按照本指南中,結果應該是你所需要的:

1)在您的應用程序中籤名:在Visual Studio中,您可以使用自己的證書輕鬆簽署您的應用程序,這不是什麼大問題應對。

2)分發證書:爲了避免該對話框中,如果要安裝該應用程序,您需要將證書分發到以下商店上的任何機(使用GPO爲):Trusted PublishersTrusted 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秒,僅當用戶登錄時。

所有用戶都會看到的是「安裝」進度。

一言以蔽之:

  • 註冊代碼
  • 分發證書
  • 觸發了PowerShell腳本
  • 包是PowerShell中inivisible vbs腳本內腳本安裝
  • 部署vbs腳本到每臺機器,使用任務計劃程序確保它在用戶上下文中運行。
相關問題