2012-06-07 81 views
1

首先,是的,我在網上搜索這個主題,但是我的案例更具體一些,所以這就是我的問題的原因。開發一個以管理員身份運行命令的應用程序

我的應用程序是在Visual Studio .NET 2005 Framework 2.0的開發可執行的winform應用程序,C#

該應用程序需要運行一個命令行上一些命令。該命令必須以管理員身份運行。

,實際工作的代碼是:

 string output = ""; 
     Process Consola = new Process(); 
     ProcessStartInfo ConsolaStartInfo = new ProcessStartInfo(); 
     ConsolaStartInfo.FileName = "cmd.exe"; 
     ConsolaStartInfo.WorkingDirectory = System.Environment.SystemDirectory; 
     ConsolaStartInfo.UseShellExecute = !NeedOutput; 
     ConsolaStartInfo.RedirectStandardOutput = NeedOutput; 
     Consola.StartInfo = ConsolaStartInfo; 
     ConsolaStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     ConsolaStartInfo.CreateNoWindow = true; 
     ConsolaStartInfo.Arguments = "/C " + CommandToPerform; 
     ConsolaStartInfo.Verb = "runas"; 
     Consola.Start(); 
     Consola.WaitForExit(); 

其中:

CommandToPerform is a string var with a command 
    NeedOutput is true or false depending if i need a return output or not. 
    (This works) 

第一個技巧是:這個應用程序完美的作品,就好像我在運行Visual Studio的管理員預期Windows 7.

第二個技巧是:如果我以管理員身份運行Visual Studio NOT,此應用程序完美地工作,但每次執行命令行時這個過程要求我在屏幕上進行安全驗證(UAC)

是的,我嘗試使用清單,但是我有很多問題需要編譯。它有時會返回9009錯誤,很多錯誤。

所以我的問題是:

1)有可能做到這一點,而不要求用戶的權限?應用程序必須保持沉默。這是真正的問題。如果是這樣的話......

2)如何爲我的應用程序定義清單以管理員身份運行此命令?我想念什麼?這是應用程序的相同標誌?

3)我的應用能否以管理員身份運行這些命令,而不以管理員身份運行?這是一個完美的場景,將使用這個應用程序的用戶不能/不能成爲管理員。

4)這將工作在XP? XP要求UAC? (我不能在XP上測試它,直到我開發一個最低要求版本)

任何類型的想法/解決方案/提示將不勝感激,如果最終不是解決方案,更好的解決方法將標記爲答案(我有個100%速度)

注:

  • 我無法通過客戶要求從2.0框架遷移到以上版本。
  • 我無法通過客戶端要求將Visual Studio .NET 2005遷移到上述版本。
  • 該應用程序需要運行從XP(沒有任何SP)到Windows 7的所有版本
  • 是的,我可以使用一個解決方法IF是根據「微軟策略」和應用程序要求(框架2。0,即不從Microsoft不能使用API​​或類似的東西,器官功能障礙綜合徵/控制/庫)

EDITED:

  • 添加鍵的溶液:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers WORKED。

但是,當你運行應用程序,它的提示(與普通UAC提示)的權限

+1

我覺得在回答中寫這個很愚蠢,但我認爲UAC是在那裏彈出並詢問用戶,我非常肯定這是沒有辦法的。 – Akku

+0

看看這可以幫助你:[介紹ConsolR](http://blog.appharbor.com/2012/05/30/introducing-consolr) – lsalamon

+0

請閱讀註釋。 –

回答

0

可以通過運行該命令的小服務來完成,並且服務進程安裝程序必須使用屬性Account on:LocalSystem。

因此,您的應用程序不需要任何要求或清單。

它的工作在Win7和XP上

MSDN Creating a Windows Service

和NOTE:

LocalSystem帳戶具有廣泛的權限,包括寫入事件日誌的能力 。請謹慎使用此帳號,因爲它可能會增加您受惡意軟件攻擊的風險。對於其他 任務,請考慮使用LocalService帳戶,該帳戶充當本地計算機上的非特權用戶 ,並向任何遠程服務器提供匿名 憑據。

2

好問題的答案1)和3)很簡單:這是不可能的。因爲如果可能的話,整個UAC根本就沒有用處。

我不知道XP的兼容性(但我認爲XP會忽略清單),不幸的是我沒有使用UAC提示和VS2005的經驗。我只在VS2008及以上版本中這樣做過,所以我也無法幫助。我確實找到了VS2005的指南,但很可能你也看到了相同的指南:

Enabling your application for uac on vista

+0

是的,我試過了,但它有很多問題,對於C++來說,C++是不同的。無論如何+1的答案,我生病繼續搜索,如果我不能這樣做,那麼我會將它標記爲答案 –

+0

UAC不能沉默。只有Windows附帶的應用程序才能繞過Windows 7上的UAC提示。 –

+1

您必須創建與Windows XP兼容的專用UAC清單。 MSDN有說明。 XP中沒有UAC:您是管理員或受限用戶。要使用管理員權限執行某些操作,您必須知道登錄名和密碼。 –

相關問題