如何从Inno Setup安装程序设置全局环境变量?

在前

如何在Inno Setup中设置全局环境变量?

背景:我正在使用Inno安装实用程序,需要在进行实际安装之前设置全局环境变量。

阿德里安

试试这个:

[Registry]
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName: "VARIABLE_NAME"; \
    ValueData: "new_value"; Flags: preservestringtype

您可能需要添加以下内容:

[Setup]
; Tell Windows Explorer to reload the environment
ChangesEnvironment=yes

或者尝试:

[Run]
Filename: "{app}\MyProg.exe"; BeforeInstall: SetEnvPath

[Code]
#ifdef UNICODE
  #define AW "W"
#else
  #define AW "A"
#endif

function SetEnvironmentVariable(lpName: string; lpValue: string): BOOL;
  external 'SetEnvironmentVariable{#AW}@kernel32.dll stdcall';

procedure SetEnvPath;
begin
  if not SetEnvironmentVariable('VARIABLE_NAME', 'new_value') then
    MsgBox(SysErrorMessage(DLLGetLastError), mbError, MB_OK);
end;

参考:Inno Setup常见问题-设置环境变量

如果未传播变量更改(请参见Inno Setup中[Run]程序无法识别环境变量[不可用]

[Run]
...; AfterInstall: RefreshEnvironment

[Code]
const
  SMTO_ABORTIFHUNG = 2;
  WM_WININICHANGE = $001A;
  WM_SETTINGCHANGE = WM_WININICHANGE;

type
  WPARAM = UINT_PTR;
  LPARAM = INT_PTR;
  LRESULT = INT_PTR;

function SendTextMessageTimeout(hWnd: HWND; Msg: UINT;
  wParam: WPARAM; lParam: PAnsiChar; fuFlags: UINT;
  uTimeout: UINT; out lpdwResult: DWORD): LRESULT;
  external '[email protected] stdcall';  

procedure RefreshEnvironment;
var
  S: AnsiString;
  MsgResult: DWORD;
begin
  S := 'Environment';
  SendTextMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    PAnsiChar(S), SMTO_ABORTIFHUNG, 5000, MsgResult);
end;

更多细节:

Inno Setup:设置系统环境变量

在Windows 2000,XP和Windows 2003 Server等更现代(换句话说,正确的)操作系统上,环境变量存储在注册表中的以下键下:

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \环境

通过在此键下创建新值或修改值(如果已存在)来添加变量。要删除变量,只需删除其注册表值,除非要删除扩展值的一部分(例如PATH),在这种情况下,只需删除所需的部分。

此时,除非您注销或重新引导,否则Windows将不会知道您所做的更改。为了解决这个问题,SetEnv将向系统中的所有窗口广播WM_SETTINGCHANGE这样就可以将其他更改通知给其他正在运行的应用程序,例如Explorer.exe。如果从命令提示符下运行SetEnv,则不会更新当前DOS窗口的环境变量。这主要是由于以下事实:进程(SetEnv)无法更改其父级的环境(命令提示符)。但是,您打开的任何新的DOS /命令提示符都将显示新的变量/值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Chef设置环境变量?

来自分类Dev

如何从Scala设置环境变量?

来自分类Dev

如何设置Hadoop环境变量

来自分类Dev

如何设置整数作为环境变量?

来自分类Dev

如何从Inno Setup安装JRE?

来自分类Dev

Inno Setup中的[Run]程序无法识别环境变量[不可用]

来自分类Dev

如何设置持久的环境变量

来自分类Dev

如何设置ZeroBrane Studio的环境变量

来自分类Dev

如何检查是否在C程序中设置了环境变量

来自分类Dev

Inno Setup:/ verysilent安装后如何自动运行程序?

来自分类Dev

如何设置环境变量?

来自分类Dev

如何在Inno Setup中最小化安装程序?

来自分类Dev

Inno Setup-如何安装Windows Update脱机安装程序

来自分类Dev

如何用空格设置环境变量?

来自分类Dev

如何使用Inno Setup的[Code]部分中的值设置注册表项(环境变量)?

来自分类Dev

Inno Setup-卸载程序时从PATH环境变量中删除路径

来自分类Dev

为Inno Setup执行的Postgres(psql)进程设置PGPASSWORD环境变量

来自分类Dev

如何用bosh设置环境变量?

来自分类Dev

如何为anacron设置环境变量?

来自分类Dev

如何设置环境变量?

来自分类Dev

如何设置环境变量PATH?

来自分类Dev

如何永久设置环境变量

来自分类Dev

如何找到并设置$ EDITOR环境变量?

来自分类Dev

如何从XSUB设置Perl环境变量?

来自分类Dev

如何设置环境变量?

来自分类Dev

Inno Setup-不获取环境变量

来自分类Dev

使用Inno设置获取环境变量

来自分类Dev

如何为使用`nohup`执行的程序设置环境变量?

来自分类Dev

如何解压缩Inno Setup安装程序