2010-10-29 55 views
1

我們有一個應用程序套件,我們通過本地「自動更新」應用程序進行更新。此應用程序基本上連接到我們的「更新服務器」並下載文件以覆蓋,更新甚至添加新的功能/應用程序到我們的應用程序套件。但是,這不適用於UAC。我們的自動更新應用程序是通過HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run註冊表項啓動的命令行.NET應用程序。Windows 7 UAC自動更新應用程序

我們遇到的問題是UAC打開時我們的應用程序無法運行。它也不會提示用戶允許程序運行。我有什麼選擇來解決這個問題或解決問題?

以下是選項:
1.關閉UAC - 公司政策
2.使用ClickOnce的 - 不支持我們的需求(這就是爲什麼我們去自產自銷)

非常感謝。

回答

5

您可以在application manifest中申請UAC標高。如果您指定requireAdministrator,則它將調用UAC,除非機器策略阻止UAC提示。

+0

所以纔會這樣有效用「是/否」框提示我的用戶允許我的自動更新應用程序運行? – Adam 2010-10-29 20:22:20

+0

@亞當:是的,這是我的理解。當然,這是UAC「灰色桌面」類型的Yes/No框。 – 2010-10-29 20:31:13

3

由於您的更新程序是一個單獨的exe文件,因此您在遊戲之前。除了按照@Martin的建議在它上面放置一個清單,理想情況下,您還可以更改主應用程序的UI。啓用一個表示「應用更新」的按鈕/菜單項,或者彈出一些顯示「強制更新已準備就緒的模式UI」,單擊「確定」繼續。然後在按鈕或菜單項或模態UI的確定,decorate with a shield。這提醒用戶他們將得到UAC提示。

沒有這個,你的代碼就能正常工作,但它們會被嚇到。他們正在使用該應用程序,監視核反應堆或批准費用帳戶等等,並突然 - 譴責! - 屏幕變黑,他們得到一個提示 - 它有一個EXE名稱,但沒有人讀它,它可能無法解釋多少。

UAC prompt

有一個很好的機會,這不請自來的UAC提示將不會從用戶那裏得到同意。所以改變你的UI來向他們解釋是一個更好的方法。

2

理想情況下,您可以使用MSI作爲您的安裝程序/更新程序 - 它知道是否/如何提升。

你其他的解決辦法是用行政privelages到ShellExecute您的更新:

RunAsAsAdmin("C:\Users\Adam\AppData\Temp\ISW-1864.exe"); 

哪裏RunAsAdmin是代碼,知道如何在這個過程中執行的過程和提升:

function RunAsAdmin(hWnd: HWND; filename: string; Parameters: string): Boolean; 
{ 
    See Step 3: Redesign for UAC Compatibility (UAC) 
    http://msdn.microsoft.com/en-us/library/bb756922.aspx 
} 
var 
    sei: TShellExecuteInfo; 
begin 
    ZeroMemory(@sei, SizeOf(sei)); 
    sei.cbSize := SizeOf(TShellExecuteInfo); 
    sei.Wnd := hwnd; 
    sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI; 
    sei.lpVerb := PChar('runas'); 
    sei.lpFile := PChar(Filename); // PAnsiChar; 
    if parameters <> '' then 
     sei.lpParameters := PChar(parameters); // PAnsiChar; 
    sei.nShow := SW_SHOWNORMAL; //Integer; 

    Result := ShellExecuteEx(@sei); 
end; 
+0

「理想情況下,您可以使用MSI作爲您的安裝程序/更新程序」是否有鏈接可以引導某人以基本方式完成此操作? – hawbsl 2011-07-12 15:33:46

+0

如果您將程序作爲MSI分發,MSI已經知道如何要求提升。你需要做的是創建一個MSI安裝程序,其中有整個應用程序專用於做。最喜歡的是WiX - Windows安裝程序XML工具集(http://wix.sourceforge.net/manual-wix2/wix_index.htm) – 2011-07-13 13:28:57