2015-10-20 386 views
-1

漫游文件夹中,我使用NSIS,使在C#桌面应用程序.exe和我必须写一些文件的应用程序数据漫游文件夹写文件使用NSIS脚本

我尝试下面的代码的用户

!define ROAMING_FOLDER_ROOT "$APPDATA\APPDUMMY\APPFILES" 
MessageBox MB_OK 'AppDATA FOLDER "${ROAMING_FOLDER_ROOT}"' #here i am getting the correct path of the Appdata roaming folder frm variable 
Section -Additional 
SetOutPath "$ROAMING_FOLDER_ROOT" 
SetOverwrite off 
File "C:\MYAPPSOURCECODE\BIN\BookStore.sqlite" 
SetOverwrite ifnewer 
File "C:\MYAPPSOURCECODE\BIN\AppSettings.xml" 
File "C:\MYAPPSOURCECODE\BIN\Resources\defData.xml" 
File "C:\MYAPPSOURCECODE\BIN\Resources\dummy.html" 
SetOutPath "$ROAMING_FOLDER_ROOT\Resources" 
File "C:\MYAPPSOURCECODE\BIN\Resources\appjsfile.js" 
SectionEnd 

虽然我试图以它的写作做同样的$ LOCALAPPDATA到AppData的本地文件夹,但我希望把它写入到漫游文件夹

+0

你的问题是什么呢? 如果你想写入漫游文件夹 - 使用$ APPDATA。如果你想写入本地文件夹 - 相应地使用$ LOCALAPPDATA。 你的代码看起来不错。 –

+0

我正在尝试将文件写入ROAMING文件夹,但此代码实际上并未写入漫游文件夹。我可以看到文件在C:\\\ ProgramData FOlder内生成,这是所有应用程序的公共区域。无法看到它没有写入Appdata漫游文件夹的任何原因 –

+0

您发布的代码不能编译。将MessageBox移动到某个节/函数后,您仍然会收到一个编译器警告,您应该注意! – Anders

回答

1

啊,看来, 你使用普通外壳上下文 尝试设置

SetShellVarContext current 

在您获得$ APPDATA之前。

Var ROAMING_FOLDER_ROOT 
MessageBox MB_OK 'AppDATA FOLDER "${ROAMING_FOLDER_ROOT}"' #here i am getting the correct path of the Appdata roaming folder frm variable 
Section -Additional 
SetShellVarContext current 
StrCpy $ROAMING_FOLDER_ROOT "$APPDATA\APPDUMMY\APPFILES" 
SetOutPath "$ROAMING_FOLDER_ROOT" 
SetOverwrite off 
File "C:\MYAPPSOURCECODE\Models\BookStore.sqlite" 
SetOverwrite ifnewer 
File "C:\MYAPPSOURCECODE\BIN\AppSettings.xml" 
File "C:\MYAPPSOURCECODE\BIN\Resources\defData.xml" 
File "C:\MYAPPSOURCECODE\BIN\Resources\dummy.html" 
SetOutPath "$ROAMING_FOLDER_ROOT\Resources" 
File "C:\MYAPPSOURCECODE\BIN\Resources\appjsfile.js" 
SectionEnd 
1

如果你看一下你的代码贴出你看到,在MessageBox叫你打电话SetOutPath当你引用一个名为$ROAMING_FOLDER_ROOT变量,这可能会产生一个编译器警告引用的${ROAMING_FOLDER_ROOT}定义,但。确保在访问定义时使用${}语法!

NSIS有一个叫做外壳上下文和$ AppData的常数受此概念:

SetShellVarContext current ; Current is the default 
DetailPrint AppData=$AppData ; C:\Users\%username%\AppData\Roaming 
SetShellVarContext all 
DetailPrint AppData=$AppData ; C:\ProgramData (This is in the All Users folder on XP) 
SetShellVarContext current ; Restore it back to the default