zoukankan      html  css  js  c++  java
  • 注册表的写入以及环境的删除和使用

    ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
    
    #define MyAppName "My Program"
    #define MyAppVersion "1.5"
    #define MyAppPublisher "My Company, Inc."
    #define MyAppURL "https://www.example.com/"
    #define MyAppExeName "MyProg.exe"
    #define MyAppAssocName MyAppName + " File"
    #define MyAppAssocExt ".myp"
    #define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
    
    [Setup]
    ; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
    ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
    AppId={{79E2CD03-D170-4011-A9FD-8D55CEA75DC9}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}
    AppPublisherURL={#MyAppURL}
    AppSupportURL={#MyAppURL}
    AppUpdatesURL={#MyAppURL}
    DefaultDirName={autopf}{#MyAppName}
    ChangesAssociations=yes
    DisableProgramGroupPage=yes
    ; Uncomment the following line to run in non administrative install mode (install for current user only.)
    ;PrivilegesRequired=lowest
    OutputDir=C:UsersAdministratorDesktop
    OutputBaseFilename=mysetup
    SetupIconFile=C:UsersAdministratorDesktopagowy-k3amy-001.ico
    Compression=lzma
    SolidCompression=yes
    WizardStyle=modern
    ChangesEnvironment=yes
    
    [Languages]
    Name: "english"; MessagesFile: "compiler:Default.isl"
    Name: "chinesesimplified"; MessagesFile: "compiler:LanguagesChineseSimplified.isl"
    
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
    
    [Files]
    Source: "C:Program Files (x86)Inno Setup 6Examples{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
    
    [Registry]
    Root: HKCR; Subkey: "Test"; ValueType: string; ValueName: "URL Protocol"; ValueData: ""; Flags: uninsdeletevalue
    Root: HKCR; Subkey: "Test"; ValueType: string; ValueName: ""; ValueData: "Test Protocol"; Flags: uninsdeletevalue
    Root: HKCR; Subkey: "TestDefaultIcon"; ValueType: string; ValueName: ""; ValueData: """{app}{#MyAppExeName}"""; Flags: uninsdeletekey
    Root: HKCR; Subkey: "Testshell"; ValueType: none; ValueName: ""; ValueData: ""
    Root: HKCR; Subkey: "Testshellopen"; ValueType: none; ValueName: ""; ValueData: ""
    Root: HKCR; Subkey: "Testshellopencommand"; ValueType: string; ValueName: ""; ValueData: """{app}{#MyAppExeName}"" ""%1"""
    
    [Icons]
    Name: "{autoprograms}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"
    Name: "{autodesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon
    
    [Run]
    Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
    
    [code]
    const EnvironmentKey = 'Environment';
    
    procedure EnvAddPath(instlPath: string);
    var
        Paths: string;
    begin
        { 检索当前的路径 }
        if not RegQueryStringValue(HKEY_CURRENT_USER, EnvironmentKey, 'Path', Paths) then
            Paths := '';
    
        if Paths = '' then
            Paths := instlPath + ';'
        else
        begin
            { 如果已在路径中找到字符串则跳过 }
            if Pos(';' + Uppercase(instlPath) + ';',  ';' + Uppercase(Paths) + ';') > 0 then exit;
            if Pos(';' + Uppercase(instlPath) + '\;', ';' + Uppercase(Paths) + ';') > 0 then exit;
    
            { 将应用安装路径附加到路径变量的末尾 }
            Log(Format('Right(Paths, 1): [%s]', [Paths[length(Paths)]]));
            if Paths[length(Paths)] = ';' then
                Paths := Paths + instlPath + ';'  { 不要加倍';'在环境(路径)中 }
            else
                Paths := Paths + ';' + instlPath + ';' ;
        end;
    
        { 覆盖(或在缺少时创建)路径环境变量 }
        if RegWriteStringValue(HKEY_CURRENT_USER, EnvironmentKey, 'Path', Paths)
        then Log(Format('The [%s] added to PATH: [%s]', [instlPath, Paths]))
        else Log(Format('Error while adding the [%s] to PATH: [%s]', [instlPath, Paths]));
    end;
    
    
    procedure EnvRemovePath(instlPath: string);
    var
        Paths: string;
        P, Offset, DelimLen: Integer;
    begin
        { 如果注册表项不存在则跳过 }
        if not RegQueryStringValue(HKEY_CURRENT_USER, EnvironmentKey, 'Path', Paths) then
            exit;
    
        { 如果在路径中找不到字符串则跳过 }
        DelimLen := 1;     { Length(';') }
        P := Pos(';' + Uppercase(instlPath) + ';', ';' + Uppercase(Paths) + ';');
        if P = 0 then
        begin
            { 也许 instlPath 存在于 Paths 中,但以 '\;' 结尾 }
            DelimLen := 2; { Length('\;') }
            P := Pos(';' + Uppercase(instlPath) + '\;', ';' + Uppercase(Paths) + ';');
            if P = 0 then exit;
        end;
    
        { 确定在 Delete() 操作中从何处开始字符串子集。 }
        if P = 1 then
            Offset := 0
        else
            Offset := 1;
        { 更新路径变量 }
        Delete(Paths, P - Offset, Length(instlPath) + DelimLen);
    
        { 覆盖路径环境变量 }
        if RegWriteStringValue(HKEY_CURRENT_USER, EnvironmentKey, 'Path', Paths)
        then Log(Format('The [%s] removed from PATH: [%s]', [instlPath, Paths]))
        else Log(Format('Error while removing the [%s] from PATH: [%s]', [instlPath, Paths]));
    end;
    
    procedure CurStepChanged(CurStep: TSetupStep);
    begin
        if CurStep = ssPostInstall
        then EnvAddPath(ExpandConstant('{app}'));
    end;
    
    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    begin
        if CurUninstallStep = usPostUninstall
        then EnvRemovePath(ExpandConstant('{app}'));
    end;
  • 相关阅读:
    nginx 服务器重启命令,关闭
    eclipse实现热部署和热启动
    Intellij IDEA 文件修改提示星号
    IntelliJ IDEA 自动编译功能无法使用,On 'update' action:选项里面没有update classes and resources这项
    idea最常使用的快捷键
    centos 切换用户显示bash-4.2$,不显示用户名路径的问题
    汉诺塔
    C语言笔记
    @org.springframework.beans.factory.annotation.Autowired(required=true)
    Error creating bean with name 'xxxx' defined in URL
  • 原文地址:https://www.cnblogs.com/Galesaur-wcy/p/15069225.html
Copyright © 2011-2022 走看看