【问题标题】:NSIS retrieve and copy file from AppDataNSIS 从 AppData 检索和复制文件
【发布时间】:2015-01-06 22:24:18
【问题描述】:

我想检查一个文件并将其复制到另一个目录(如果存在)。不幸的是,该文件存在于 AppData 文件夹中。

CheckFile:
         !define INSTDIR_DATA "$APPDATA\Local\VirtualStore\Program Files\SomeFolder"
         IfFileExists INSTDIR_DATA\SettingsFile.ini CopyOver NotHere

我进入本节没有问题,但尽管明确确保文件存在,但它似乎无法找到该文件。我错过了什么吗?需要注意的是,我确实希望通过当前用户目录搜索此目录,因此不需要将其设置为所有用户。

【问题讨论】:

    标签: installation nsis appdata


    【解决方案1】:

    NSIS 有一个 $LocalAppData 常量:

    DetailPrint $AppData
    DetailPrint $LocalAppdata
    

    在我的系统上打印:

    C:\Users\Anders\AppData\Roaming
    C:\Users\Anders\AppData\Local
    

    $AppData 实际上不是 AppData “根”,而是它的漫游部分。

    如果您的脚本中有 RequestExecutionLevel 属性,那么这将影响 Windows 处理文件系统重定向的方式,而 VirtualStore 就是其中的一部分。

    【讨论】:

    • 所以,这有帮助,但仍然无法正常工作。那么将其定义为“$LocalAppdata\VirtualStore\Program Files\Atari\Nerf\System”是否正确?我目前没有明确设置执行级别,我应该尝试以管理权限运行此功能吗?它将如何影响在 VirtualStore 中查找/复制文件?
    • 使用定义的语法是 ${name} 所以我希望你的真实代码使用 IfFileExists "${INSTDIR_DATA}\..."。执行级别不应该真正影响在 VirtualStore 中查找文件,但如果您没有设置它并且您没有提升您将无法从它复制到 $ProgramFiles (support.microsoft.com/kb/927387#MT3)。如果您仍然无法使其正常工作,您应该尝试 Microsoft/Sysinternals 的 Process Monitor 以查看您使用的路径有什么问题...
    • 哦,我会忽略这样的事情。谢谢!
    • @Anders:在搜索 NSIS 常量列表时,我注意到 Norton Security 浏览器插件会阻止所有 nsis.sourceforge.io 页面以及 nsis.sourceforge.net,并将它们标记为危险.你有什么可以做的吗?
    • @djvg 不,您应该向他们提交报告,然后卸载 Norton。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多