首页 > 其他分享 >NSIS安装包设计为当前用户和所有用户安装

NSIS安装包设计为当前用户和所有用户安装

时间:2024-10-12 10:12:02浏览次数:8  
标签:安装包 用户 选择 NSIS INSTALL 注册表 安装 ###

一、在windows系统中为当前用户安装和所有用户安装有什么差异

 

最直观、简单的区别就是如果选择“仅为我安装”,那么安装完成后,软件只能安装软件的这个用户使用,其他用户的开始菜单和桌面上没有这个应用;而如果选择“为使用这台电脑的任何人安装”,那么安装完成后,所有用户的开始菜单中都会有这个应用,都可以使用。

如果选择仅为我安装,那么用户不需要提供管理员权限,因为所有可能修改的目录预期均为用户所有应用的相关资源会被解包到%APPDATA%目录应用的开始菜单快捷方式会被创建在%APPDATA%\Microsoft\Windows\Start Menu\Programs中

应用的相关注册表项会写在Computer\HKEY_CURRENT_USER位置

如果选择为所有用户安装,那么用户需要提供管理员权限应用相关的资源会被解包到%PROGRAMFILES%或者 %PROGRAMFILES(X86)%

文件夹中应用的开始菜单快捷方式会被创建在%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs 中

应用可能在%PROGRAMDATA%中写入一些与用户无关的配置文件应用相关的注册表项会写在Computer\HKEY_LOCAL_MACHINE位置

如果应用开发符合微软的规范,无论选择那种安装,应用都会将一些与用户相关的配置文件、日志、缓存等写入 %APPDATA% ,以实现不同用户使用相互隔离。

二、NSIS示例

 

为了在 NSIS 脚本中实现“为所有用户安装”和“仅为当前用户安装”选项,并在注册表和安装位置上体现不同,可以按照以下步骤进行:

### 1. 创建选择页面

使用 `nsDialogs` 创建一个页面,让用户选择安装类型。

### 2. 设置变量

定义一个变量来存储用户的选择。

### 3. 修改安装路径

根据用户的选择,设置安装路径到适当的位置。

### 4. 更新注册表

根据安装类型,更新注册表项,以便在“所有用户”或“当前用户”范围内可用。

### 示例脚本

```nsis
!include "MUI2.nsh"
!include "LogicLib.nsh"
!include "nsDialogs.nsh"

Var INSTALL_TYPE
Var Dialog

Page custom SelectInstallType
Page instfiles

Function SelectInstallType
nsDialogs::Create 1018
Pop $Dialog

${NSD_CreateRadioButton} 20u 20u 200u 10u "为所有用户安装"
Pop $0
${NSD_SetState} $0 ${BST_CHECKED}

${NSD_CreateRadioButton} 20u 40u 200u 10u "仅为当前用户安装"
Pop $1

nsDialogs::Show
FunctionEnd

Function .onNextPage
${NSD_GetState} $0 $R0
StrCmp $R0 ${BST_CHECKED} 0 +3
StrCpy $INSTALL_TYPE "all"
Goto done

${NSD_GetState} $1 $R0
StrCmp $R0 ${BST_CHECKED} 0 +3
StrCpy $INSTALL_TYPE "current"

done:
FunctionEnd

Function .onInit
; Set default installation path based on the selection
${If} $INSTALL_TYPE == "all"
SetShellVarContext all
StrCpy $INSTDIR "$PROGRAMFILES\MyApp"
${Else}
SetShellVarContext current
StrCpy $INSTDIR "$LOCALAPPDATA\MyApp"
${EndIf}
FunctionEnd

Section "Install"
SetOutPath $INSTDIR
; Copy files, etc.

; Update registry
${If} $INSTALL_TYPE == "all"
WriteRegStr HKLM "Software\MyApp" "InstallPath" "$INSTDIR"
${Else}
WriteRegStr HKCU "Software\MyApp" "InstallPath" "$INSTDIR"
${EndIf}
SectionEnd
```

### 说明

- **选择页面**:使用 `nsDialogs` 创建选择界面。
- **变量存储**:用 `INSTALL_TYPE` 变量存储用户选择。
- **安装路径**:在 `.onInit` 函数中,根据用户选择设置不同的安装路径。
- **注册表更新**:在安装过程中,根据选择在 `HKLM` 或 `HKCU` 中写入注册表项。

确保根据你的具体需求调整脚本中的路径和逻辑。

标签:安装包,用户,选择,NSIS,INSTALL,注册表,安装,###
From: https://www.cnblogs.com/xietianjiao/p/18459970

相关文章

  • 使用C#获取系统关键信息:CPU、内存、硬盘、用户与网络状态
    在C#中,获取系统信息如CPU、内存、硬盘、用户以及网络状态等,可以通过多种方式实现,包括使用System.Management命名空间中的类来查询WMI(WindowsManagementInstrumentation)信息,或者使用.NETFramework自带的类库。以下是一些基本示例来展示如何获取这些信息。1.引入必要的命......
  • Redis可视化工具Redis Desktop Manager(附安装包)
    前言redis工具,我相信每个开发都需要,如果每次查都去client执行指令,我怕查完之后,老大就要发版咯。我之前一直用的Redis可视化工具RedisDesktopManager,总觉得差点意思,直到同事推荐了个新的,突然2眼发光!!先上链接:Redis可视化工具(含我之前用的简约版,跟同事发我的新版)RedisDes......
  • 【Linux探索学习】第四弹——Linux权限管理详解:理解用户、组和权限之间的关系
    前言:在前面我们已经学习了Linux的基础指令,相信大家对Linux已经有了一定的认识,今天我们来学习Linux权限的相关知识点,Linux权限是Linux初学者必须要掌握的内容目录一、Linux下用户类型二、权限基本概念三、权限的表示四、文件访问权限的相关设置方法1.chmod指令2.ch......
  • Photoshop2024下载安装包(附安装教程)
    Photoshop2024安装包:Photoshop2024安装包百度网盘下载PS2024安装教程:1、右击【PS2024.zip】,选择【解压到PS2024】2、右击【Set-up.exe】,选择【以管理员身份运行】3、点击右下角灰色的小文件夹图标,选择【更改位置】4、选择安装路径后,点击【确定】,然后点击【继......
  • 在Kubernetes中实现灰度发布(Canary Release)是一种有效的策略,它允许逐步将新版本的应用
    在Kubernetes中实现灰度发布(CanaryRelease)是一种有效的策略,它允许逐步将新版本的应用推送给部分用户群体,以收集反馈并监控新版本的表现。这种方法可以显著降低新版本上线的风险,并在问题发生时快速回滚。灰度发布通常比滚动更新(RollingUpdate)提供更细粒度的控制,因为它可以精确......
  • Redis工具可视化工具Redis Desktop Manager(附安装包)
    前言redis工具,我相信每个开发都需要,如果每次查都去client执行指令,我怕查完之后,老大就要发版咯。我之前一直用的Redis可视化工具RedisDesktopManager,总觉得差点意思,直到同事推荐了个新的,突然2眼发光!!先上链接:Redis可视化工具RedisDesktopManager(旧版):AnotherRedisDesktopMan......
  • Cinema 4D最新2025版安装包教程百度云下载
    如大家所熟悉的,Cinema4D常常被简称为C4D,它是一款深受使用者和用户喜爱的3D建模、动画和渲染软件,广泛应用于影视、动画、科学、建筑等领域。目前最新为C4D2025版本。高效的建模系统C4D的建模系统高效且强大,支持多边形建模、细分曲面等多种建模方式,可创建复杂的几何体和表面......
  • WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现C
    1、新建了一个用户控件,里面画了一个实心圆,以及一个文本控件的组合,当作我要实验使用的用户控件(TestUserControl)。 2、在主窗体里面进行引用,可以看到引用以后,会在工具箱上显示新增的用户控件3、为了测试方便,我直接在先前的Lo'gin页面直接进行添加该用户控件,效果如下。 4、......
  • 这波高颜值的官网界面,不知道让多少用户沦陷了
    高颜值的官网界面确实有着强大的吸引力,让众多用户为之“沦陷”。一个拥有高颜值官网界面的网站,首先在视觉上就给用户带来了极大的冲击。精心设计的布局、和谐的色彩搭配以及精美的图片和动画效果,使得整个网站仿佛一件艺术品,让人赏心悦目。这种视觉上的享受能够瞬间抓住用户......
  • Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
    作者:元泊引言背景信息随着移动互联网技术的持续演进与全民互联网时代的深入,用户在Android、iOS应用程序、小程序、H5游戏及网页等多元化平台上的交互时长显著增长。这一趋势加剧了用户体验(UX)场景的复杂性,并对跨设备及多样网络环境下的性能监控提出了更高要求。在此背景下,深......