如何在 Inno Setup 中为每个用户(包括未来的新用户)安装文件?
How to install files for each user, including future new users, in Inno Setup?
我有一个安装程序需要分发一些默认文件供用户修改。每个 Windows 用户配置文件都需要有自己的这些(可写)文件副本,包括将来在 Windows 中创建新用户时。
我已经知道如何分发到当前用户的个人资料,但对所有用户的个人资料,尤其是未来的用户不了解。我已经看到某些软件如何自动将文件包含在新的 Windows 用户配置文件中。
如何让 Inno Setup 以这种方式分发文件?
对于所有现有帐户,请参阅:
对于未来的帐户: Default User
配置文件中的任何内容都会自动复制到所有新创建的配置文件中。
因此,如果您想将文件添加到所有新用户的 "documents" 文件夹,请将其添加到 Default User
配置文件的 Documents
文件夹。通常是:
C:\Users\Default\Documents
要检索正确的路径,请使用 SHGetFolderPath
并将 nFolder
参数设置为您之后的路径(例如 CSIDL_PERSONAL
表示 "documents" 文件夹)和 hToken
参数设置为 -1
(默认用户配置文件)。
[Files]
Source: "default.txt"; DestDir: "{code:GetDefaultUserDocumentsPath}"
[Code]
const
CSIDL_PERSONAL = [=11=]05;
SHGFP_TYPE_CURRENT = 0;
MAX_PATH = 260;
S_OK = 0;
function SHGetFolderPath(
hwnd: HWND; csidl: Integer; hToken: THandle; dwFlags: DWORD;
pszPath: string): HResult;
external 'SHGetFolderPathW@shell32.dll stdcall';
function GetDefaultUserDocumentsPath(Param: string): string;
var
I: Integer;
begin
SetLength(Result, MAX_PATH);
if SHGetFolderPath(0, CSIDL_PERSONAL, -1, SHGFP_TYPE_CURRENT, Result) <> S_OK then
begin
Log('Failed to resolve path to default user profile documents folder');
end
else
begin
{ Look for NUL character and adjust the length accordingly }
SetLength(Result, Pos(#0, Result) - 1);
Log(Format('Resolved path to default user profile documents folder: %s', [Result]));
end;
end;
(代码用于 )。
我有一个安装程序需要分发一些默认文件供用户修改。每个 Windows 用户配置文件都需要有自己的这些(可写)文件副本,包括将来在 Windows 中创建新用户时。
我已经知道如何分发到当前用户的个人资料,但对所有用户的个人资料,尤其是未来的用户不了解。我已经看到某些软件如何自动将文件包含在新的 Windows 用户配置文件中。
如何让 Inno Setup 以这种方式分发文件?
对于所有现有帐户,请参阅:
对于未来的帐户: Default User
配置文件中的任何内容都会自动复制到所有新创建的配置文件中。
因此,如果您想将文件添加到所有新用户的 "documents" 文件夹,请将其添加到 Default User
配置文件的 Documents
文件夹。通常是:
C:\Users\Default\Documents
要检索正确的路径,请使用 SHGetFolderPath
并将 nFolder
参数设置为您之后的路径(例如 CSIDL_PERSONAL
表示 "documents" 文件夹)和 hToken
参数设置为 -1
(默认用户配置文件)。
[Files]
Source: "default.txt"; DestDir: "{code:GetDefaultUserDocumentsPath}"
[Code]
const
CSIDL_PERSONAL = [=11=]05;
SHGFP_TYPE_CURRENT = 0;
MAX_PATH = 260;
S_OK = 0;
function SHGetFolderPath(
hwnd: HWND; csidl: Integer; hToken: THandle; dwFlags: DWORD;
pszPath: string): HResult;
external 'SHGetFolderPathW@shell32.dll stdcall';
function GetDefaultUserDocumentsPath(Param: string): string;
var
I: Integer;
begin
SetLength(Result, MAX_PATH);
if SHGetFolderPath(0, CSIDL_PERSONAL, -1, SHGFP_TYPE_CURRENT, Result) <> S_OK then
begin
Log('Failed to resolve path to default user profile documents folder');
end
else
begin
{ Look for NUL character and adjust the length accordingly }
SetLength(Result, Pos(#0, Result) - 1);
Log(Format('Resolved path to default user profile documents folder: %s', [Result]));
end;
end;
(代码用于