【问题标题】:Changing the computer name with Inno Setup使用 Inno Setup 更改计算机名称
【发布时间】:2016-02-29 21:13:55
【问题描述】:

有没有办法通过 Inno Setup 更改您的计算机名称?我是 Inno Setup 的新手,但我搜索了很多,但没有找到任何示例。我知道您可以使用常量{computername} 访问计算机名称,但似乎没有更改它的功能。

我想过用[Registry]部分更改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName中计算机名的注册表键,但是我不知道如果我使用该语法创建一个新键会发生什么。它会覆盖它吗?它会给我一个错误吗?任何想法将不胜感激。

创建新密钥的语法示例

Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName"; ValueType: string; ValueName: "ComputerName"; ValueData: "MyNewComputerName";

【问题讨论】:

    标签: windows installation inno-setup computer-name


    【解决方案1】:

    您应该致电SetComputerName API function

    另外由于计算机名的更改只有在计算机重新启动后才有效,所以您应该将AlwaysRestart directive 设置为yes 以使安装程序在安装后重新启动计算机。

    [Setup]
    AlwaysRestart=yes
    
    [Code]
    
    function SetComputerName(lpComputerName: PAnsiChar): BOOL;
        external 'SetComputerNameA@kernel32.dll stdcall';
    
    procedure CurStepChanged(CurStep: TSetupStep);
    begin
      if CurStep = ssInstall then
      begin
        Log('Changing computer name');
        if SetComputerName('MyNewName') then
        begin
          Log('Computer name changed');
        end
          else
        begin
          Log('Failed to change computer name - ' + SysErrorMessage(DLLGetLastError));
        end;
      end;
    end;
    

    在 Inno Setup 的 Unicode 版本(Inno Setup 6 的唯一版本)上测试。


    更改注册表项也可能有效。只是你应该使用ComputerName 键(不是ActiveComputerName)并重新启动。

    我相信你的语法是正确的。虽然我没有测试。但是请注意 maximal computer name length 是 15 个字符(所以 MyNewComputerName 太长了)。

    【讨论】:

    • 不错的答案!但是有一些奇怪的东西,代码应该是 Pascal,不是吗?为什么您放置的链接是c ++?我可能做错了假设。
    • 您是指对SetComputerName 的引用吗?原生 API 声明通常在 C 中给出/记录。这并不意味着您不能从 Pascal 调用该函数。您只需要将 C 声明转换为 Pascal。这就是 function SetComputerName ... external 的好处。
    • 哦,我明白了。谢谢你的解释!
    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多