2016-04-01 44 views
0

我知道有很多類似的問題在那裏像這樣的how to get %AppData% pathC++如何獲得在非管理員帳戶%AppData的%路徑和運行VS2013以管理員身份

但是我的是不同的:

1。我有兩個帳戶:

Admin- Administrator account 
Test- Non-Administrator account 

2.使用VS2013作爲管理員運行我的項目,導致項目需要提升權限。然後,使用下面的代碼來獲取應用程序數據路徑:

TCHAR szPath[MAX_PATH]; 
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, szPath))) 
{ 
    //.... 
} 

szPath實際值C:\Users\Admin\AppData\Roaming,不C:\Users\Test\AppData\Roaming,我想。

任何人都知道該怎麼做?提前致謝。

+0

不,您可以在任何帳戶中以「管理員」身份運行。它不會切換到其他帳戶。在許多計算機上沒有稱爲「管理員」的特定帳戶,並且沒有名爲「c:\ users \ administrator」的文件夾,但仍可以以管理員身份運行,這意味着該程序具有較高的訪問權限。 –

+0

@BarmakShemirani我有一個錯字。它是C:\ Users \ Admin \ AppData \ Roaming而不是c:\ users \ administrator。我的管理員帳戶名是admin。 –

+1

沒有什麼可以解決的。您正在管理員帳戶的上下文中運行該流程,因此這是該流程的正確AppData路徑。以admin身份運行時使用測試帳戶的AppData文件夾會導致問題。 –

回答

1

問題的根源是VS作爲「Admin」帳戶運行。只要你繼續這樣做,%AppData%就會指向該賬戶的appdata文件夾。沒有驚喜。

所以,你必須改變你的方法。一些選項:

  1. 您可以刪除硬連線對%APPDATA%的依賴關係。不要自動執行。把它放到一些配置文件中並從那裏讀取路徑。你將可以在任何帳戶下運行該應用程序,並將其配置爲查看任何路徑
  2. 您可以添加標記以在調試/發佈模式中打開/關閉該配置文件等
  3. VS以Admin身份運行提升模式 - 確定,所以用它來編譯應用程序。然後在普通帳戶下運行/調試/測試您的應用程序。 VS可以以用戶X的身份運行,而應用程序可以以用戶Y的身份運行。由於X是Admin,VS仍然可以連接/調試Y的進程。最簡單的例子:停止使用F5運行&調試,最常使用調試/附加到和你的應用程序
  4. ,VS不需要運行'管理員'。更有可能的是,它需要在高架環境下運行。確保你的賬戶在管理員組/ etc中,然後運行在你自己的VS上。如果一切正常,那麼它將以「管理員權限」作爲您的帳戶運行。
  5. 爲什麼你甚至需要升高VS?這不正常。誰告訴你,在99.9%的情況下是錯誤的。當「VS需要升級」時最常見的情況是有人使用COM組件並使用COM自動註冊。你不能在沒有管理員權限的情況下重新註冊一個COM組件,所以你應該以管理員身份運行VS。錯誤。寫小批量/ EXE /腳本,將取消/註冊該組件,標誌着它需要提升,將其添加到預/ postbuild步或MSBuild任務,並且VS能神奇地保持在用戶級別上再次運行

和等等..有很多選擇,一切都取決於你願意改變你的方法..

關於第四個:試試這個東西 - 找到一個快捷方式到'命令行'(cmd.exe)在你的開始菜單。右鍵點擊它。你應該看到選項「以管理員身份運行」(不是「以其他用戶身份運行」)使用它。一旦打開控制檯,寫:echo %APPDATA%並檢查它是什麼。它應該指向您的appdata,但在窗口標題欄上,您應該看到Administrator:CommandPrompt警告信息。現在寫start cmd.exe。另一個管理控制檯應該彈出來提示該高程傳播到子進程。在新的控制檯中檢查APPDATA,它應該仍然是你的。那只是一個測試。

如果控制檯工作並傳播了高程和環境變量,那麼您應該也可以直接在VisualStudio圖標上選擇「以管理員身份運行」。就這樣。

+0

感謝您的解決方案,我會嘗試它們。我們正在做COM組件,這就是爲什麼我們需要提升VS. –

相關問題