2011-10-24 51 views
6

我的應用程序有一個主要問題。我有一個應用程序&更新作爲一個單獨的exe文件。當更新可用時,updater執行更新,並在進程完成時啓動我的應用程序。主要問題是 - 應用程序安裝在程序文件文件夾中,因此更新程序需要UAC管理權限,這沒關係,但是當我需要運行我的應用程序更新程序時,需要以普通用戶身份運行它,因爲如果它以管理員身份運行並放下不起作用(不是應用程序的問題,UAC阻止它)。我嘗試了幾種不同的解決方案,甚至是這一個: How to run NOT elevated in Vista (.NET)c#從UAC管理員級別的權限降低啓動過程

它沒有幫助我 - 我的應用程序以管理員身份運行。

回答

9

你最好避免從高架起步的非升高過程。這是棘手的部分,容易出錯。

這種方式較好:

  1. 你更新最初啓動非升高的使用,其表現有asInvoker水平。
  2. 當它啓動時,它使用runas謂詞以提升的權限重新啓動,並傳遞一個命令行參數來指示它。此實例執行更新並返回。
  3. 這裏又來了非高架更新,並開始用相同的非提升用戶令牌應用程序步驟1中的

相當簡單和穩健的開始更新的第一個實例。

+0

+1;這個答案的第一行非常重要。我讀過的文章表示,不管你嘗試什麼技巧,嘗試去提升(取消升級的代幣來冒充)是一個壞主意。自從我第一次發佈Vista之後,我不知道在哪裏可以找到那些或那些文章。在這個問題中給出另一個選項:http://stackoverflow.com/questions/1173630/how-do-you-de-elevate-privileges-for-a-child-process –

+0

我會嘗試這樣的,謝謝你的回答。 :) – n1tr0

+0

這樣做 - 作品像魅力!非常感謝我的朋友! ;) – n1tr0