2015-10-06 56 views
0

我有一個與MS-Outlook接口的VB.NET應用程序,要做到這一點,它必須在沒有ADMIN特權的情況下運行。一切都好。從高級應用程序通過Process.Start運行沒有ADMIN權限的應用程序

在使用ADMIN權限運行的獨立應用程序「LiveUpdate」模塊結束其更新並再次加載主應用程序之後,會出現問題。該負載是使用執行:

Process.Start(MyApp.exe) 

但是當「MyApp的」加載時,它不能再與MS-的Outlook,其拒絕該接口發送的在不同UAC權限的正在運行的程序的典型消息接口。我猜當LiveUpdate執行Process.Start時,該命令會使用相同的權限(ADMIN)。

事實:

  1. 在LiveUpdate必須以管理員身份運行,但必須MyApp的以正常方式運行。
  2. 兩者都有自己的MANIFEST,但似乎上面的調用繞過了MyApp的清單 - 默認設置爲「Invoke」。
  3. 如果關閉MyApp並手動再次運行它,一切都會正常進行。
  4. 某些客戶端有USER/PASSWORD,其他客戶端沒有它(Windows沒有自動加載用戶/密碼對話框)。在Windows Vista中
    5.應用程序運行,7,8,8.1和10

那麼,有沒有一些方法來 「的Process.Start」 的應用程序從調用者(的LiveUpdate)棄ADMIN特權?

在這次通話中用戶/密碼的使用不是我的選擇... 謝謝!

+1

我很確定沒有辦法。您可以添加其他未升級的東西,並像指揮員一樣開始提升第一件事,然後啓動您的應用程序正常。 – user3697824

+0

謝謝@ user3697824,我真的應該是一樣的...... –

回答

0

下面是我發現的:您可以通過運行explorer.exe文件,從高架軟件啓動一個卸載過程。此方法應與除admin用戶(不是用戶管理員,但系統管理員)以外的所有人一起使用。我發現這個信息here

對於它的代碼的一部分,它看起來像這樣:(貸記本去plutonix;按照上面的鏈接)

Dim proc = New Process 
proc.StartInfo.UseShellExecute = True 
proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal 
proc.StartInfo.WorkingDirectory = mypath 

If chkAdmin.Checked Then     ' run this app as admin 
    proc.StartInfo.FileName = myApp 
    proc.StartInfo.WorkingDirectory = mypath 
    proc.StartInfo.Verb = "runas"   ' run "me" as admin 
    proc.StartInfo.Arguments = "" 
Else          ' run explorer w/app as arg 
    ' de-elevate new app instance to run de-elevated 
    proc.StartInfo.FileName = Path.Combine(windir, "explorer.exe") 
    proc.StartInfo.Verb = ""    ' important! 
    proc.StartInfo.Arguments = myApp  ' send the child app name as arg 
End If 

proc.Start() 

我沒有測試過這一點我自己,但它應該正常工作。 (所有的功勞歸功於用戶:plutonix

+0

謝謝SID,但是如果你更深入地搜索它,你會看到微軟將它指定爲一個錯誤(真的!),建議不要使用它,因爲它將在下一個Windows版本中得到糾正 - 而且我在Windows 7版本中看到了這一點。我相信它會盡快廢棄......但謝謝。 –

+0

哦哇,現在可能已經修好了,謝謝你讓我知道,因爲我說我自己沒有嘗試過。 – Sid

+0

完全沒有問題。再次感謝您的幫助...... :) –