Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用NSIS脚本将文件写入漫游文件夹_C#_Deployment_Nsis - Fatal编程技术网

C# 使用NSIS脚本将文件写入漫游文件夹

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

我正在使用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 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移动到某个节/函数后,仍然会收到编译器警告,您确实应该注意!