【问题标题】:How to copy files into AppData\Local\Temp in inno script如何在 inno 脚本中将文件复制到 AppData\Local\Temp
【发布时间】:2013-08-19 12:00:07
【问题描述】:

我使用 inno 脚本为我的应用程序创建了一个 .exe 文件。在这里,我想将文件从我的安装文件夹复制到 AppData\Local\Temp 目录。这是使用以下代码完成的。

Source: "WebcamApplet_1-0-0\*"; DestDir: "{localappdata}\Temp\WebcamApplet_1-0-0"

我面临的问题是这段代码只是将文件复制到系统管理员中,即 C:\Users\Sysadmin\AppData\Local\Temp (Admin),我必须把它放在 C:\Users\Manesh \AppData\Local\Temp(User) 让我的应用程序正常工作。我该如何解决这个问题。

【问题讨论】:

  • 如果要将文件复制到用户临时文件夹中,可以使用{%TEMP} 常量。请记住,用户可以将 Temp 文件夹设置为不同的位置。通过使用此常量,您将始终获得用户 Temp 的正确路径。
  • {tmp} 将仅访问 C:\Windows\Temp 而不是 C:\Users\Manesh\AppData\Local\Temp
  • {tmp} 是 Inno Setup 的“私有”温度(例如“C:\WINDOWS\TEMP\IS-xxxxx.tmp”)。见文档:Inno Setup Consnstants
  • 我检查了文档并尝试了它,它没有复制到上面所说的位置。
  • 如果您的意思是{tmp}C:\WINDOWS\TEMP\IS-xxxxx.tmp,那么这只是一个示例,而不是真实位置。它只是显示,Inno Setup 在每次安装运行时都会创建自己的文件夹。尝试在命令行中调用 ECHO %TEMP% 以检查您是否会获得您要查找的 Temp 文件夹。如果是,那么{%TEMP} 将是脚本的常量。

标签: inno-setup


【解决方案1】:

如果您的应用程序希望将文件安装到 Temp 文件夹,那么您的应用程序设计不当。这个文件夹之所以这样命名,是因为用户或系统可以随时随意删除其中包含的所有文件——因此它只适合临时使用。

此外,每台机器的安装程序(使用PrivilegesRequired=admin 运行的默认安装程序)没有合理可靠的方法将文件或设置安装到每用户文件夹,包括每用户临时文件夹。

如果您真的想这样做,您应该设置PrivilegesRequired=lowest 来创建一个每个用户的安装程序——但请记住,这会引入其他限制,例如限制您的应用程序可以安装到的位置。如果您以最低权限运行,则可以使用{%TEMP} 来引用临时路径。

【讨论】:

  • 只是出于好奇,您不知道是否有办法从模拟进程中获取登录用户的令牌(对于SHGetFolderPath 类似函数的hToken 参数)?这将是获得所需路径的方法(以及该问题的确切答案;不是正确,而是准确)。
  • 您可以获取桌面窗口,以及该窗口的拥有进程,然后是该进程正在运行的令牌。但在“最低”安装程序中是不必要的(因为安装程序已经使用正确的用户运行)并且在“管理员”安装程序中是一个坏主意(因为这意味着安装步骤在错误的位置完成,所以应用程序仅适用于一部分用户)。对于每台机器安装的应用程序,任何每用户设置都应通过运行应用程序本身而不是安装程序来完成。
猜你喜欢
  • 2020-02-11
  • 2019-02-14
  • 1970-01-01
  • 2011-03-19
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多