Visual Studio 2012 中以管理員身份調試應用程序

今天寫了一個程序,功能是獲取任務管理器中的「描述」一列中的內容:c#

C#代碼以下:安全

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GetProcDesc
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] procs = Process.GetProcessesByName("pcas");
            foreach (Process proc in procs)
            {
                try
                {
                    string path = proc.MainModule.FileName.ToString();
                    FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(path);

                    Console.WriteLine("進程:" + proc.ProcessName);
                    Console.WriteLine("路徑:" + path);
                    Console.WriteLine("描述:" + fileVersionInfo.FileDescription);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }

            Console.Read();
        }
    }
}

但執行這段代碼時,會報錯 System.ComponentModel.Win32Exception:拒絕訪問
app

後來我查了一下,發現這個錯誤與Windows的權限管理有關係,我試着用管理員身份運行編譯好的exe程序,此時程序即可正常執行了:ui

因而我就想,既然用管理員身份就能夠正常執行,那能不能直接在 VisualStudio 中就以管理員身份開啓程序的調試呢?通過一番研究,答案是確定的。spa

個人操做系統是Win7,使用的VS版本是VS2012。操作系統

打開程序集的屬性窗口,找到「安全性」設置,其中有一個「啓用 ClickOnce 安全性設置」,勾選後再反勾選該複選框。
調試

此時在解決方案資源管理器中,就能夠找到 app.manifest 文件,勾選「啓用 ClickOnce 安全性設置」是爲了讓VS生成這個文件,取消勾選是爲了支持後面對 requestedExecutionLevel 的設置。code

打開 app.manifest,將 requestedExecutionLevel 設置爲
xml

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

以下圖所示:
進程


三個level的功能以下:

asInvoker:應用程序就是以當前的權限運行。

highestAvailable:應用程序以當前用戶能夠得到的最高權限運行。

requireAdministrator:應用程序僅以系統管理員權限運行。

咱們將其改成 requireAdministrator

此時再次調試程序時,VS會提示「此任務要求應用程序具備提高的權限」,點擊「使用其餘憑據從新啓動」便可。若是仍是彈出以前「拒絕訪問」的異常,可嘗試重啓一下VS。

此時VS會重啓,能夠看到,重啓後的VS左上角的窗體標題上多了一個「(管理員)」

此時再調試程序,就能夠直接以管理員身份進行調試了


END

相關文章
相關標籤/搜索