如何安装到 CSIDL_COMMON_APPDATA
How to install into CSIDL_COMMON_APPDATA
使用NSIS, I want to set the InstallDir
to CSIDL_COMMON_APPDATA。
这可能类似于
C:\Documents and Settings\All Users\Application Data
很遗憾,the variables/constants allowed in InstallDir
不支持常用应用数据文件夹。
所以我尝试了:
System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
InstallDir "\MyProduct"
(0x23
等于 CSIDL_COMMON_APPDATA)
编译时,NSIS 报错如下:
Error: Can't add entry, no section or function is open!
我的问题:
如何设置安装目录为CSIDL_COMMON_APPDATA?
基于this suggestion,我找到了解决方法:
首先,将 InstallDir
设置为任意值:
InstallDir "$PROGRAMFILES\MyProduct"
接下来用.onInit
函数改一下:
Function .onInit
System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
StrCpy $InstDir "\MyProduct"
FunctionEnd
SetShellVarContext
指令更改了一些 NSIS 常量,使它们指向特殊路径的所有用户版本:
Function .onInit
SetShellVarContext all
StrCpy $InstDir $AppData
FunctionEnd
使用NSIS, I want to set the InstallDir
to CSIDL_COMMON_APPDATA。
这可能类似于
C:\Documents and Settings\All Users\Application Data
很遗憾,the variables/constants allowed in InstallDir
不支持常用应用数据文件夹。
所以我尝试了:
System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
InstallDir "\MyProduct"
(0x23
等于 CSIDL_COMMON_APPDATA)
编译时,NSIS 报错如下:
Error: Can't add entry, no section or function is open!
我的问题:
如何设置安装目录为CSIDL_COMMON_APPDATA?
基于this suggestion,我找到了解决方法:
首先,将 InstallDir
设置为任意值:
InstallDir "$PROGRAMFILES\MyProduct"
接下来用.onInit
函数改一下:
Function .onInit
System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
StrCpy $InstDir "\MyProduct"
FunctionEnd
SetShellVarContext
指令更改了一些 NSIS 常量,使它们指向特殊路径的所有用户版本:
Function .onInit
SetShellVarContext all
StrCpy $InstDir $AppData
FunctionEnd