2011-05-24 216 views
7

我在Windows 7下使用D2010編寫一個似乎需要管理員權限的應用程序(我認爲是因爲它使用COM與第三方.exe通信,這也需要管理員權限) 。在Delphi中使用管理員權限開發應用程序

我根據需要添加的清單資源,但是當我嘗試從IDE調試應用程序,它報告

「無法創建進程。該 請求的操作需要 提升」

...並且它不會運行。如果我以管理員身份運行Delphi,那麼我的應用程序可以正常運行,但這感覺像是一種危險的蠻力方法,特別是因爲我開發的大多數應用程序都不需要管理員權限。

當我運行我的應用程序而不是讓整個IDE運行提升時,有什麼方法可以讓Delphi提示提升?

+6

當您需要爲* that *應用程序工作並在其他人上工作時以普通用戶身份啓動IDE時,以管理員身份啓動IDE會出現什麼問題?我就是做這個的! – 2011-05-24 09:28:21

+0

@科斯敏,謝謝。似乎這可能是最好的方法。 – Roddy 2011-05-24 09:35:34

+1

這是正常行爲,調試器無法調試提升的調試對象,必須在啓動調試會話之前提升*。 – 2011-05-24 21:21:26

回答

7

沒有,也沒有爲VS工作:

https://stackoverflow.com/questions/3265787/how-do-i-debug-an-process-as-elevated-with-visual-studio-2008-sp1-on-windows-7

我想你可以提高運行遠程調試器,並使用遠程調試雖然附加IDE。

它不起作用,因爲該進程作爲另一個用戶(或使用其他用戶令牌)運行。

的IDE是試圖運行使用CreateProcess的調試過程中,當應用程序需要elavation失敗,更多的細節可以在本文中找到:

http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

的RAD Studio可以運行使用ShellExecute的應用與「runas」動詞,但這仍然不能解決「其他用戶上下文下的調試過程」問題。

換句話說:升級的進程只能由精心設計的調試器進行調試。

編輯:

Delphi的XE2 IDE是32位,並且只能通過遠程調試器(其被巧妙地從用戶隱藏)調試64位應用程序。

我想英巴卡迪諾可以以類似的方式調試高級應用程序。

+0

我不明白這個答案。當我讀到它時,你會發現,即使IDE運行提升,它也無法調試具有必需的管理員清單的進程。我是否正確地理解你?我認爲我不能正確理解你,因爲那個陳述是錯誤的。 – 2011-05-24 15:05:53

+1

@David:我說**調試應用程序**可以通過IDE提升,但IDE仍然無法附加到應用程序。我編輯了相應的句子來澄清。 – 2011-05-24 15:45:55

+1

所以你的答案可以歸結爲「一個升級的過程只能通過提升的調試器進行調試」?那是對的嗎? – 2011-05-24 22:11:11

4

我知道調試這樣的應用程序的唯一方法是以管理員身份運行IDE。我不會推薦這樣做,只是爲了調試會話。

+0

如果切實可行,您還應該將應用程序分成兩個獨立的部分:一個作爲正常的「AsInvoker」進程運行,另一個需要提升。然後你應該添加「UAC盾」到開始另一個過程的按鈕,這就是UAC應該如何實現的。然後您只需提升IDE以調試「RequireAdministrator」進程。 – 2011-05-25 09:35:37

1

實際上,可能可以從具有「正常級別訪問」的進程調試具有「更高級別訪問」的進程。

至少要等到Windows XP中就足夠了您的用戶帳戶添加到Debugger Users組例如運行調試進程與Administrator特權。

這並不解決德爾福2010年代的問題在所有運行進程,但如果你嘗試調試器附加到一個已經運行的進程可能是有用的。

我不認爲這適用於UAC啓用Vista +,但我想我會提到它。 :)

要確切的UAC分裂令牌概念禁用SeDebugPrivilege

http://blogs.msdn.com/b/greggm/archive/2006/03/30/565303.aspx

http://blogs.msdn.com/b/mithuns/archive/2006/04/04/568291.aspx

11

UAC還捕捉具有詞語 「設置」, 「更新」 或「的任何應用程序安裝「的名稱或許多版本資源字段中。 (公司名稱,應用程序名稱,說明等) 它認爲任何此類應用程序都是潛在的「安裝程序」應用程序,因此必須以管理員權限運行

聽起來很瘋狂,但是的確如此,請參見「安裝程序檢測」在此document節。

您可以通過包含一個清單,指出它不需要管理員權限解決這個問題。

+2

歡迎來到StackOverflow,@Phil。你真的讀過這個問題嗎?你的回答看起來與被問到的內容無關。 – jachguate 2012-11-13 16:08:52

+0

我明白你的觀點。我添加了關於UAC的相關信息,因爲有人提出了這個問題。它實際上並不存在這個問題。道歉。 – 2013-07-29 11:26:19

+0

不要道歉,這是一個很好的答案,對於一個非常不同的問題。所以想法是對特定問題有特定的答案,所以積累「相關的東西」並不是真正的目標,而且我們有谷歌這樣做;) – jachguate 2013-07-29 18:39:32

1

運行德爾福(所有版本)以管理員身份。

您可以更改德爾福快捷方式屬性也(作爲管理員始終運行它ATOR)。

相關問題