如何安装到CSIDL_COMMON_APPDATA

时间:2015-06-26 11:54:28

标签: windows installer nsis

使用NSIS,我想将InstallDir设置为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 "$1\MyProduct"

0x23等于CSIDL_COMMON_APPDATA)

编译时,NSIS会抱怨以下错误:

  

错误:无法添加条目,没有打开任何部分或功能!

我的问题:

如何将安装目录设置为CSIDL_COMMON_APPDATA?

2 个答案:

答案 0 :(得分:1)

SetShellVarContext指令更改了一些NSIS常量,以便它们指向特殊路径的所有用户版本:

Function .onInit
SetShellVarContext all
StrCpy $InstDir $AppData
FunctionEnd

答案 1 :(得分:0)

基于this suggestion,我找到了一种解决方法:

首先,将InstallDir设置为任意值:

InstallDir "$PROGRAMFILES\MyProduct"

接下来,使用.onInit功能进行更改:

Function .onInit
    System::Call 'shell32::SHGetSpecialFolderPath(i $HWNDPARENT, t .r1, i 0x23, i0)i.r0'
    StrCpy $InstDir "$1\MyProduct"
FunctionEnd