I have a Windows service that runs as the local system account. It stores some data in its %LOCALAPPDATA%
folder. For LocalSystem
, this is the following location:
C:\Windows\system32\config\systemprofile\AppData\Local
This works without a hitch; the service creates its own subfolder and writes files to it.
Now, using Inno Setup, I'm trying to install an initial file to that folder:
[Files]
Source: "LICENSE"; DestDir: "{sys}\config\systemprofile\AppData\Local\InnoTest"; Flags: ignoreversion
The log suggests that this works fine:
[14:20:10,722] -- File entry --
[14:20:10,725] Dest filename: C:\Windows\system32\config\systemprofile\AppData\Local\InnoTest\LICENSE
[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:\Windows\system32\config\systemprofile\AppData\Local\InnoTest
[14:20:10,738] Successfully installed the file.
It says "successfully installed the file", but neither the file nor the directory is anywhere to be seen.
Run the installer again, however, and you will be told that the destination file exists:
[14:24:47,381] -- File entry --
[14:24:47,395] Dest filename: C:\Windows\system32\config\systemprofile\AppData\Local\InnoTest\LICENSE
[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.
So: The installer thinks the file exists, but I can't see it.
This is specifically an issue with the System account; if I switch to, say, the %LOCALAPPDATA%
of the LocalService
account, things work as expected:
[Files]
Source: "LICENSE"; DestDir: "{win}\ServiceProfiles\LocalService\AppData\Local\InnoTest"; Flags: ignoreversion
If anyone could shed some light on what is (or isn't) going on here, it would be much appreciated.
This is almost a duplicate of:
File/DLL installed to {sys} does not appear in C:\Windows\system32
Though your question probably deserves specific answer.
If I understand correctly, you want to install to System32
on both 32-bit and 64-bit systems. So there are two options:
Use the 64-bit mode;
If you do not want (or not dare) to switch whole installer to 64-bit mode, you will need two entries in the [Files]
section. One for 64-bit systems with 64bit
flag and one for 32-bit systems without the flag:
[Files]
Source: "LICENSE"; \
DestDir: "{sys}\config\systemprofile\AppData\Local\InnoTest"; \
Flags: ignoreversion; Flags: 64bit; Check: IsWin64
Source: "LICENSE"; \
DestDir: "{sys}\config\systemprofile\AppData\Local\InnoTest"; \
Flags: ignoreversion; Check: not IsWin64