C# 使用NSIS脚本将文件写入漫游文件夹
我正在使用NSIS为c#中的桌面应用程序生成exe,并且我必须为用户向AppData Roaming文件夹写入一些文件 我尝试了下面的代码C# 使用NSIS脚本将文件写入漫游文件夹,c#,deployment,nsis,C#,Deployment,Nsis,我正在使用NSIS为c#中的桌面应用程序生成exe,并且我必须为用户向AppData Roaming文件夹写入一些文件 我尝试了下面的代码 !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 fo
!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本地文件夹,但我希望它可以写入漫游文件夹,
您正在使用公共shell上下文
试着设置
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
啊,似乎,,
您正在使用公共shell上下文
试着设置
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
啊,似乎,,
您正在使用公共shell上下文
试着设置
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
啊,似乎,,
您正在使用公共shell上下文
试着设置
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
如果您查看您发布的代码,您会看到在
消息框
调用中,您引用了${ROAMING\u FOLDER\u ROOT}
定义,但调用SetOutPath
时,您引用的是名为$ROAMING\u FOLDER\u ROOT
的变量,这可能会产生编译器警告。确保在访问定义时使用${}
语法
NSIS有一个称为shell上下文的概念,$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
如果您查看您发布的代码,您会看到在
消息框
调用中,您引用了${ROAMING\u FOLDER\u ROOT}
定义,但调用SetOutPath
时,您引用的是名为$ROAMING\u FOLDER\u ROOT
的变量,这可能会产生编译器警告。确保在访问定义时使用${}
语法
NSIS有一个称为shell上下文的概念,$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
如果您查看您发布的代码,您会看到在
消息框
调用中,您引用了${ROAMING\u FOLDER\u ROOT}
定义,但调用SetOutPath
时,您引用的是名为$ROAMING\u FOLDER\u ROOT
的变量,这可能会产生编译器警告。确保在访问定义时使用${}
语法
NSIS有一个称为shell上下文的概念,$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
如果您查看您发布的代码,您会看到在
消息框
调用中,您引用了${ROAMING\u FOLDER\u ROOT}
定义,但调用SetOutPath
时,您引用的是名为$ROAMING\u FOLDER\u ROOT
的变量,这可能会产生编译器警告。确保在访问定义时使用${}
语法
NSIS有一个称为shell上下文的概念,$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
你的问题到底是什么?如果要写入漫游文件夹,请使用$APPDATA。如果要写入本地文件夹,请相应地使用$LOCALAPPDATA。您的代码看起来正确。我正在尝试将文件写入漫游文件夹,但此代码实际上没有写入漫游文件夹。我可以看到这些文件是在C:\\\ProgramData文件夹中生成的,该文件夹是所有应用程序的公用区域。看不出它没有写入Appdata漫游文件夹的任何原因您发布的代码无法编译。将MessageBox移动到某个节/函数后,仍然会收到编译器警告,您确实应该注意!你的问题到底是什么?如果要写入漫游文件夹,请使用$APPDATA。如果要写入本地文件夹,请相应地使用$LOCALAPPDATA。您的代码看起来正确。我正在尝试将文件写入漫游文件夹,但此代码实际上没有写入漫游文件夹。我可以看到这些文件是在C:\\\ProgramData文件夹中生成的,该文件夹是所有应用程序的公用区域。看不出它没有写入Appdata漫游文件夹的任何原因您发布的代码无法编译。将MessageBox移动到某个节/函数后,仍然会收到编译器警告,您确实应该注意!你的问题到底是什么?如果要写入漫游文件夹,请使用$APPDATA。如果要写入本地文件夹,请相应地使用$LOCALAPPDATA。您的代码看起来正确。我正在尝试将文件写入漫游文件夹,但此代码实际上没有写入漫游文件夹。我可以看到这些文件是在C:\\\ProgramData文件夹中生成的,该文件夹是所有应用程序的公用区域。看不出它没有写入Appdata漫游文件夹的任何原因您发布的代码无法编译。将MessageBox移动到某个节/函数后,仍然会收到编译器警告,您确实应该注意!你的问题到底是什么?如果要写入漫游文件夹,请使用$APPDATA。如果要写入本地文件夹,请相应地使用$LOCALAPPDATA。您的代码看起来正确。我正在尝试将文件写入漫游文件夹,但此代码实际上没有写入漫游文件夹。我可以看到这些文件是在C:\\\ProgramData文件夹中生成的,该文件夹是所有应用程序的公用区域。看不出它没有写入Appdata漫游文件夹的任何原因您发布的代码无法编译。将MessageBox移动到某个节/函数后,仍然会收到编译器警告,您确实应该注意!