【问题标题】:Write a file to Roaming folder using NSIS script使用 NSIS 脚本将文件写入漫游文件夹
【发布时间】:2015-10-20 20:32:24
【问题描述】:

我正在使用 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 Local 文件夹,但我想让它可写入 Roaming 文件夹

【问题讨论】:

  • 您的问题到底是什么?如果您想写入漫游文件夹 - 使用 $APPDATA。如果您想写入本地文件夹 - 相应地使用 $LOCALAPPDATA。您的代码看起来不错。
  • 我正在尝试将文件写入 ROAMING 文件夹,但此代码实际上并未写入 Roaming 文件夹。我可以看到文件是在 C:\\\ProgramData Folder 中生成的,这是所有应用程序的公共区域。看不到它不写入 Appdata Roaming 文件夹的任何原因
  • 您发布的代码无法编译。将 MessageBox 移动到一个部分/函数后,您仍然会收到一个编译器警告,您确实应该注意!

标签: c# deployment nsis


【解决方案1】:

如果您查看您发布的代码,您会发现在MessageBox 调用中您引用了${ROAMING_FOLDER_ROOT} 定义,但在调用SetOutPath 时您引用了一个名为$ROAMING_FOLDER_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

【讨论】:

    【解决方案2】:

    啊,看来, 您正在使用通用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多