2012-10-03 75 views
0

我在這裏有點迷路。以另一個管理員身份啓動應用程序

我有一個應用程序,我們稱之爲App1。

App1正常工作。在某些情況下,App1需要執行另一個程序App2。

代碼很簡單:

  /*call app2*/ 
      ProcessStartInfo startInfo = new ProcessStartInfo(Convert.ToString(ConfigurationManager.AppSettings["pathActualizador"])); 

      startInfo.UseShellExecute = false; 

      try 
      { 
       System.Diagnostics.Process.Start(startInfo); 
      } 
      catch (ArgumentException) 
      { 
       MessageBox.Show("Error en parármetros enviados al Actualizador..", Properties.Resources.txtTituloAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 

      /*close app1 and letting app2 do its work*/ 
      Application.ExitThread(); 

在某些情況下,我有問題致電APP2授權。 App1是一個簡單的系統,app2需要創建,移動和刪除一些文件和文件夾(這就是爲什麼給我麻煩) 至少,我們解決它作爲管理員de app2執行,通過右鍵單擊 - >屬性 - >以管理員身份執行。

我想解決這個問題。 我讀過很多文章,關於在SO中創建清單文件。 所以,我創建了一個。 我從應用程序項目添加新的項目 - >添加新項 - > app.manifest

並通過創建的默認,只有改變了這種

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

此清單是對APP。 我們在100臺電腦上都有這兩個應用程序,並且我們無法逐一更改它們(大部分都在另一個國家) 但是我們有一個應用程序來修改,發送一些命令來拋出Internet,app1。 所以,我讀過如果一個進程創建另一個進程,這個新進程將具有與其父進程相同的ExecutionLevel。因此,在App1中添加清單時,當它創建App2的流程時,應該以管理員身份執行

我是對是不是?另一方面,我已經添加了清單,編譯並將.exe和.manifest發送到客戶端,運行,並且我仍然遇到同樣的問題:app2無法訪問文件夾來修改它們,返回一個特權問題。

有什麼問題嗎?我必須爲App2創建一個清單來代替?這是有點困難,也很難對每一臺機器配置窗口..

我讀過,我也可以這樣做

startInfo.Verb = "runas"; 

而且還讀到,在未來(2008年說,這)這可以被忽略,唯一的方法就是使用manifest。所以我想避免這個選項

編輯:使用Visual Studio 2010,.NET 3.5

EDIT2:我已經試過 「運行方式」,也沒有工作。用戶沒有管理員,所以沒有管理員的權限

+0

爲什麼不在虛擬機中模擬它並自己嘗試一下呢? – tomfanning

+0

第一個選項不起作用;我已經說過,已經嘗試過了。第二個可以工作,但我說我想避免這種情況,因爲將來它會被忽略。 –

+0

我在下面發佈了一個答案,因爲這不應該要求管理員憑據。 – Woot4Moo

回答

0

你有沒有嘗試設置WorkingDirectory,也許你嘗試從應用1

ProcessStartInfo info = new ProcessStartInfo(); 
info.WorkingDirectory ="SomePath"; 

的工作目錄EDITED運行應用2:

我在SO上找到一個條目可以幫助你: How to start a Process as administrator mode in C#

+0

在win xp中,有些用戶管理員贏得7個客戶端運行良好,所以我猜是正確的路徑。另外,在事件查看器中記錄了無法訪問的正確路徑 –

0

我會提出你不需要管理憑證的建議:

APP 2需要創建,移動和刪除一些文件和文件夾(這是 爲什麼給我找麻煩)

在聲明中沒有跡象表明你需要一個管理員。我會建議重新審視你的程序的架構。我會採取的第一步是在您的系統上有兩個單獨的用戶。 app1的用戶和app2的用戶可以分別稱它們爲App1UserApp2User。現在,這兩個用戶的配置應該如下:

非特權,無法登錄,只能執行其各自的程序,並且沒有權限給任何不由他們直接控制的任何內容。

現在從這裏App1User可以委託App2User執行app2,這可以防止發生任何特權升級並消除對管理員的需求。現在App2User需要能夠創建,移動和刪除它擁有的東西。這應該不是問題,因爲我可以創建,刪除和移動我自己擁有的東西的普通用戶。爲什麼需要以admin或root身份運行某些內容的原因很少。

UPDATE

在答覆如下:

問題是,當應用1需要調用應用2所以應用2可以做一些任務。 App1不需要創建文件夾或任何東西,因此使用UAC沒有問題 。應用2確實

好了,所以從地上爬起來,我們將有以下三個系統對象:

AppUser1,AppUser2, AppUserGroup 

AppUserGroup將包含AppUser1AppUser2。需要將AppUserGroup鎖定爲與應用用戶類似。需要配置權限的方式如下:

App1歸AppUserGroup所有,至少具有執行權限。
App2歸AppUserGroup所有,至少具有執行權限。

確保該權限也授予組內的用戶。現在你可以做的是調用程序AppUser1,它是AppUserGroup的成員,並且由於在組內以及該組擁有該進程而運行App2。讓我知道這是否需要進一步澄清。

+0

問題在於用戶實際上沒有寫入權限 - 我想以編程方式避免這種情況,因爲創建用戶或授予Windows用戶權限很複雜 - 就像100個客戶端進行配置。但是,如果沒有其他的方法.. –

+0

等待這是一個厚客戶端類型的應用程序或Web應用程序? – Woot4Moo

+0

winforms全部。桌面應用。 –

相關問題