我有一个作为本地系统帐户运行的Windows服务。它将一些数据存储在%LOCALAPPDATA%
文件夹中。对于LocalSystem
,这是以下位置:
C:Windowssystem32configsystemprofileAppDataLocal
这项工作顺利进行;该服务创建自己的子文件夹并向其中写入文件。
现在,使用Inno Setup,我正在尝试将一个初始文件安装到该文件夹:
[Files]
Source: "LICENSE"; DestDir: "{sys}configsystemprofileAppDataLocalInnoTest"; Flags: ignoreversion
日志表明这很好:
[14:20:10,722] -- File entry --
[14:20:10,725] Dest filename: C:Windowssystem32configsystemprofileAppDataLocalInnoTestLICENSE
[14:20:10,729] Time stamp of our file: 2022-10-24 13:56:42.000
[14:20:10,731] Installing the file.
[14:20:10,734] Creating directory: C:Windowssystem32configsystemprofileAppDataLocalInnoTest
[14:20:10,738] Successfully installed the file.
上面写着";成功安装文件">,但无论是文件还是目录都不可见。
然而,再次运行安装程序,您将被告知目标文件存在:
[14:24:47,381] -- File entry --
[14:24:47,395] Dest filename: C:Windowssystem32configsystemprofileAppDataLocalInnoTestLICENSE
[14:24:47,398] Time stamp of our file: 2022-10-24 13:56:42.000
[14:24:47,400] Dest file exists.
[14:24:47,403] Time stamp of existing file: 2022-10-24 13:56:42.000
[14:24:47,405] Installing the file.
[14:24:47,410] Successfully installed the file.
所以:安装程序认为文件存在,但我看不到。
这特别是系统帐户的问题;如果我切换到LocalService
帐户的%LOCALAPPDATA%
,事情就会按预期进行:
[Files]
Source: "LICENSE"; DestDir: "{win}ServiceProfilesLocalServiceAppDataLocalInnoTest"; Flags: ignoreversion
如果有人能告诉我们这里正在发生(或没有发生(什么,我们将不胜感激。
这里是一个最小、可复制和完整的例子。
这几乎是:
安装到{sys}的文件/DLL没有出现在C:\Windows\system32中
尽管您的问题可能需要具体的答案。
如果我理解正确,您希望在32位和64位系统上都安装到System32
。因此有两种选择:
-
使用64位模式;
-
如果您不想(或不敢(将整个安装程序切换到64位模式,则需要在
[Files]
部分中输入两个条目。一个用于带64bit
标志的64位系统,一个用于不带标志的32位系统:[Files] Source: "LICENSE"; DestDir: "{sys}configsystemprofileAppDataLocalInnoTest"; Flags: ignoreversion; Flags: 64bit; Check: IsWin64 Source: "LICENSE"; DestDir: "{sys}configsystemprofileAppDataLocalInnoTest"; Flags: ignoreversion; Check: not IsWin64