簡體   English   中英

為%ALLUSERSPROFILE%獲取NSIS變量

[英]Get NSIS Variable for %ALLUSERSPROFILE%

%ALLUSERSPROFILE%是否有NSIS變量?

如果不是,您是否知道如何使用NSIS代碼獲取此環境變量?

注意:如果我使用ReadEnvStr $R7 "ALLUSERSPROFILE" ,則$R7包含C:/ProgramData因為安裝程序已請求提升的特權( RequestExecutionLevel admin )。 這太令人沮喪了!

從Vista開始,%ALLUSERSPROFILE%是%SystemDrive%\\ ProgramData。 以前位於“所有用戶”下的某些內容已移至%Public%,其余內容移至%ProgramData%。

有幾種獲取此目錄的方法,但是它們都應該給您相同的答案:

ReadEnvStr $0 "ALLUSERSPROFILE"
DetailPrint %ALLUSERSPROFILE%=$0


System::Call 'userenv::GetAllUsersProfileDirectory(t.r0,*i${NSIS_MAX_STRLEN})i.r1'
DetailPrint GetAllUsersProfileDirectory=$0


; In Vista+ %ALLUSERSPROFIL% and CSIDL_COMMON_APPDATA is the same directory:
SetShellVarContext all
DetailPrint All:Appdata=$AppData


!define FOLDERID_ProgramData {62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}
System::Call 'shell32::SHGetKnownFolderIDList(g"${FOLDERID_ProgramData}", i0x1000, i0, *i.r1)i.r0'
${If} $0 == 0
    System::Call 'shell32::SHGetPathFromIDList(ir1,t.r0)'
    System::Call 'ole32::CoTaskMemFree(ir1)'
    DetailPrint SHGetKnownFolderIDList=$0
${EndIf}

要擴展@Anders答復,還可以使用SHGetSpecialFolderPath並進行簡單的一行調用以接收操作系統上文件夾的路徑。


System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'

將它與CSIDL Values一起使用,您可以簡單地調用一個函數並彈出返回值。

Function ".OnInit"
  System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
  pop $1
  MessageBox MB_OK|MB_ICONINFORMATION "$1"
FunctionEnd

Section ""
  ; blank section (so the script runs)
SectionEnd

這會將C:\\ ProgramData(Vista +)C:\\ Documents and Settings \\ All Users \\ Application Data(XP)返回 $ 1,並顯示一個顯示路徑的消息框。

通過切換CSIDL值( 0x23 ),您可以將路徑返回到一堆不同的系統文件夾。


以下是一些可用於返回路徑的常見CSIDL值:

  • 0x0桌面
  • 0x2程序
  • 0x5我的文件
  • 0x6收藏
  • 0x7啟動
  • 0x8最近文件
  • 0x9發送至文檔
  • 0x10桌面目錄
  • 0x11我的電腦
  • 0x14字體目錄
  • 0x15 Windows模板
  • 0x20 Internet緩存
  • 0x21餅干
  • 0x22歷史
  • 0x23通用應用數據
  • 0x25系統
  • 0x26程序文件
  • 0x27我的圖片
  • 0xb開始菜單
  • 0xd我的音樂
  • 0x1a應用數據
  • 0x1c本地應用程序數據
  • 0x2b通用程序文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM