NSIS 制作的安装包,域账户(非管理员权限)安装软件失败处理

     此文章是个人原创,转载请注明出处,谢谢。

     https://blog.csdn.net/Oyasimi1412/article/details/81980364

     由于现在很多软件都默认安装在C:\Program Files (x86) 或者C:\Program Files这样的目录下面

    现在很多企业都使用域账户管理电脑登陆,但是很多域账号不是管理员权限,使用域账户(非管理员权限)安装软件在C:\Program Files (x86) 或者C:\Program Files 会失败,我们的目录没有创建成功,且没有明显的提示信息,但是照样会显示安装完成页面(实际没有完成)。此时制作软件安装包的我们需要给出用户提示,让其改变安装目录,比如 C:\**** 这样的目录是有权限的

    非管理员域账户读者可以试试在这两个目录下新建文件或者文件夹,会提示需要权限,如下图

    使用NSIS安装包制作的安装包,在安装的过程中是会显示安装的具体过程,比如创建快捷方式等等,这种信息是一闪而过的,普通用户不会留意,就算我们使用NSIS的安全模式,有日志记录,但是由于文件夹都没创建成功,日志自然也是没有创建成功,我们是看不到错误信息的,可以去安装目录下找,是找不到我们指定的安装目录的,比如C:\Program Files (x86)\****

   此时我们需要在创建目录的过程中,如果创建文件夹失败,我们需要提示用户出错了,比如像这样

  那么应该如何在写NSIS脚本的时候做到这一点呢,接下来是具体脚本

扫描二维码关注公众号,回复: 3246676 查看本文章

 1:首先是一个section

Section "MainSection" SEC01
  SetShellVarContext current
  Call Createdir
SectionEnd

2:接着是一个创建对话框function,重点是这个,一开始我只顾着判断是否有C:\Program Files (x86)目录的写权限了,找不到好的解决方案,最后才有了下面这个方案

Function Createdir
  SetOutPath $INSTDIR   ;就是这一行会失败,然而又没有提示信息,我们需要在下一行判断文件夹存在与否,以便调用中断
  IfFileExists "$INSTDIR\*.*" Exists NotExists
  Exists:
    goto end
  NotExists:
    call AbortBox
  end:
FunctionEnd
 

3:接下来是中断对话框function,,这个框也有一些讲究,有兴趣的用户可以关注下

 Function AbortBox
  StrCpy $1 "error creating or opening directory:$\r$\r$INSTDIR.$\r$\rClick Abort to Stop the the installation,$\rRetry to try again,or$\rIgnore to skip this directory"
      MessageBox MB_ICONSTOP|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1 $1 /SD IDABORT IDRETRY retry IDIGNORE ignore
        goto next
      retry:
        Call Createdir
      ignore:
        goto next
      next:
        Abort
FunctionEnd

到这里就基本结束了,可以实现判断,文件夹在当前根目录是否创建成功,如果没有创建成功,我们应该弹框提示用户,以便用户更换目录或者其他操作

    以上就是我在制作安装包的过程中碰到的问题,由于我公司的电脑是使用的域账户管理的,才发现这个问题,普通个人用户一般都是管理员权限,或者拥有C:\Program Files (x86) 或者C:\Program Files这样的目录下面创建文件和文件夹的权限,可以不用考虑这个问题,以此做一个总结,希望朋友们理解关注

 此文章是个人原创,转载请注明出处,谢谢。

https://blog.csdn.net/Oyasimi1412/article/details/81980364

猜你喜欢

转载自blog.csdn.net/Oyasimi1412/article/details/81980364