程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 7開發:UAC數據重定向 - .NET Framework

Windows 7開發:UAC數據重定向 - .NET Framework

編輯:關於.NET

概述

本動手實驗,您將會體驗 UAC 虛擬化的效果以及一步一步來解決問題。

目標

本動手實驗中,您將會學習如何:

故障排除一個文件重定向問題

使用 Process Monitor 查找引起問題的根本原因

系統要求

您必須符 合下面的條件以完成這次實驗:

Microsoft Visual Studio 2008

Microsoft Windows 7

Microsoft TechNet 上的 Process Monitor (http://technet.microsoft.com/en- us/sysinternals/bb896645.aspx )

練習 : 體驗用戶帳戶控制虛擬化

在這個練習中,您將會診斷一個托管的應用程序,它不支持 Windows 7 和 UAC 虛擬 化,特別是,文件重定向,到 VirtualStore 文件夾。

您將首先通過一系列的測試來 確定問題。然後,您將添加 UAC 清單文件並編譯應用程序,以使之支持 UAC 。當您運行應 用程序的時候,請您注意當對受保護的文件夾進行寫入的時候 UAC 並沒有對您的文件進行虛 擬化,例如 Program Files ;而是對您的操作進行了組織並引起了“拒絕訪問” 錯誤。最後,您將對應用程序進行修改,即將文件存儲到應用程序數據( ProgramData )文 件夾,來解決這一問題。

任務 1 – 無清單文件情況下,運行應用程序

在這個任務中,您將會在沒有清單文件的情況下運行應用程序,以模仿一個舊應用程序並觸 發 UAC 虛擬化引擎。在 Visual Studio 2008 中創建一個新應用程序的時候,還會默認自動 嵌入一個包括 UAC 節點 的清單文件。

確保支持 UAC 。

在開始菜單中

打開搜索

輸入 UAC

在搜索列表中點擊“改變用戶帳戶控制設置 ”

用戶帳戶控制設置對話框出現了。確定 UAC 沒有被禁用。

設置 UAC 滑塊處於默認位置(見下圖)

點擊 OK

轉到包含 DataRedirection 解決方案 的文件夾

在 Visual Studio 中雙擊打開該解決方案

確定您沒有使用管理員權 限運行

如果 Visual Studio 是以管理員權限運行的,那麼標題欄上會顯示 “ Visual Studio (Administrator) ”

將 BrokenAppManaged 項目設置為開始項 目:

右鍵點擊解決方案窗口中的項目並選擇 Set as StartUp Project

設置目 標架構為 x86 :

右鍵點擊 BrokenAppManaged 項目並選擇 Properties.

配置 項目使應用程序在沒有清單文件的情況下運行(默認的清單文件是包含 UAC 節點的)

在 Application 選項卡中, Manifest 下,選擇 Create application without a manifest 。

轉到 FileIO 類 (在 FileIO.cs 文件中)

查看 Save 和 Load 方法和靜態構造函數,並觀察數據文件路徑是如何生成為 Program Files\BrokenApp 下的文 件的。

生成項目並運行。請再一次確定您沒有以管理員的身份運行。

打開任 務管理器並點擊 Processes 選項卡。

在 View 的菜單中,選擇 Select Columns

彈出 Select Process Page Columns 對話框

選中復選框中的 User Account Control (UAC) Virtualization ,如下圖中紅框所示(確定您選中了那個選項)

點擊 OK

請注意 UAC Virtualization 列,確定您的進程為啟用狀態

在編輯框中輸入些內容然後保存。這個操作應該成功;也就是說不會得到一個錯誤。

試著轉到路徑所指向的地方(例如, 64 位 Windows 7 中的 C:\Program Files (x86) \BrokenApp 或者 86 位 Windows 上的 C:\Program Files\BrokenApp )

注意

您在 Program Files 中肯定找不到 BrokenApp ,因為寫入文件的操作會被重定向到 VirtualStore 文件夾。

任務 2 –找出問題

在這個任務中,您將會通過 不同的步驟來確定您的應用程序正在應用 UAC 虛擬化。

從 Microsoft TechNet 網站 下載並解壓 進程管理器 ( Process Monitor ) (http://technet.microsoft.com/en- us/sysinternals/bb896645.aspx ).

啟動進程管理器

啟動 BrokenAppManaged 應用程序

點擊第三個工具欄按鈕確定進程管理器正在進行捕獲。您也可以通過按 CTRL-E 來開啟 / 關閉捕獲。

在 BrokenAppManaged 應用程序中,在文本框中輸入一 些文本。

在 BrokenAppNative 應用程序中點擊 Save 。

您可以通過點擊進程 管理器的工具欄中的第三個按鈕停止捕獲(或按 CTRL-E )。

在進程管理器中,在工 具菜單中,點擊進程樹。進程樹對話框將會彈出,如下所示:

在樹中找到 BrokenAppManaged.exe 並雙擊。

點擊關閉以關閉進程樹對話框。

在進程管理 器中右鍵點擊 BrokenAppManaged 進程名

點擊包含 BrokenAppManaged 。這將會篩選 出其他所有事件:

幫助

您能看見 BrokenAppNative 試圖創建 C:\ProgramFiles (x86)\BrokenApp\SomeFile.txt 文件。這個文件被重定向到了 VirtualStore 文件夾,這也是數據文件最終的存放的地方。

注意結果列。 “ REPARSE ”行就是最原始的操作。“ SUCCESS ”行就是重定向操作。

任務 3 – 添加一個 UAC 清單文件

在這個任務中,您將會添加一個清單文 件來使應用程序支持 UAC 。標記您的應用程序為支持 UAC 的應用程序,您要聲明應用程序 無需寫入訪問受保護的位置。 UAC 虛擬化將不會應用到您的應用程序。

在項目窗口 中右鍵點擊 BrokenAppNative 項目並選擇屬性。

右鍵點擊 BrokenAppManaged 項目 並選擇屬性

將該項目配置為應用程序在有清單文件的情況下生成。

在 Mandifest 下,選擇 Embed manifest with default settings

默認的清單文件包含 一個 UAC 節點

重新生成應用程序。

運行應用程序。

查看任務管理器 ,您將會注意到虛擬化現在被禁用了:

在編輯框中輸入一些文本並在 BrokenAppManaged 應用程序中點擊保存。您應該得到下面的錯誤:

幫助 :

由 於 UAC 虛擬化被關閉了,所以寫入受保護的位置時會收到錯誤。

任務 4 – 修 改拒絕訪問錯誤

通過在清單文件中包含 UAC 節點,您聲明了在 Windows 7 中您的應 用程序支持 UAC ;因此應用程序將不能在受保護的地方進行寫入操作。在這個任務中您將改 變文本文件的存儲地點並修復拒絕訪問錯誤。

回到 Visual Studio

在 FileIO.cs 文件中的 FileIO 類的靜態構造函數中:

注釋掉保存到 Environment.SpecialFolders.ProgramFiles 的代碼

對保存到 Environment.SpecialFolders.CommonProgramData 的代碼取消注釋

這將使得文件被 保存到通用項目數據文件夾(默認為 C:\ProgramData ),該文件夾是所有用戶都能訪問的 。

重新生成並運行應用程序。

確定數據文件現在被保存到了正確的文件夾: C:\ProgramData\BrokenApp.

您現在修復了重定向的問題並保存了您的數據文件到正 確的地方。

注意

注意對文本文件的操作沒有重定向並且成功了。

幫助 :

為了在 Visual Studio 2008 中實現重定向,您必須在清單文件中關閉 UAC 。要這 麼做:

Visual Studio 中的 C# 項目 :

1. 點擊項目菜單

2. 點擊項目 屬性

3. 在應用程序選項卡中,在資源選項卡中,選擇圖片和清單文件。

4. 選擇不包含清單文件創建應用程序。

5. 點擊 OK.

Visual Studio 中的 C++ 項目 :

1. 點擊項目菜單

2. 點擊項目屬性

3. 展開配置屬性( Configuration Properties )

4. 展開 Linker.

5. 選擇清單文件。

5. 改變啟用用戶帳戶控制( UAC )為 No

6. 點擊 OK.

這裡關閉 UAC 目的只是為了說明。所有可執行的都應該包含在清單文件中的 UAC 節點中。如果清單文件包 含了 UAC 節點, Windows 將不會把應用程序看作滯後的應用程序並且不會啟用重定向。寫 入 Program Files 文件夾會引起拒絕訪問錯誤。

總結

在這個實驗中您使用了 進程管理工具來分析了 Windows 7 UAC 虛擬化,它支持對所有受保護區域的文件的重定向和 注冊更新。您成功的通過修改代碼並保存文件到正確的位置解決解決了它。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved