因为VisualStudio中微软官方的程序打包工具,无法实现Revit多版本插件的制作,所以我选择了NSIS来制作多版本插件。

一、使用NSIS向导创建脚本

1.1、打开NSIS的VNISEdit(需要使用管理员权限来运行NSIS)

1.2、使用新建脚本:向导创建一个脚本


在向导界面,我们可以根据自己的需求,来更改应用程序的相关信息,比如:应用程序名称、应用程序版本、应用程序出版人、应用程序网站、应用程序图标、安装程序图标、安装程序文件名称、安装程序语言、用户图形界面、压缩算法 等信息。

1.3、应用程序的目录与授权信息

默认目录PROGRAMFILES\My application 表示的路径是:C:\Program Files (x86),如果我们想将程序安装到:C:\Program Files ,那么我们只需要将默认目录改为:$PROGRAMFILES64\My application。
并且我们需要准备一个txt文档,来给安装程序添加相应的授权文件。(如果不添加,脚本编译会报错)

1.4、添加应用程序文件


将NSIS的示例文件和组都删除,然后自己创建组,可以根据图片,和我一样创建组。并且给主程序添加描述,将“允许用户选择要安装的组件”打上勾。

在主程序添加插件的dll文件(如果有其他的文件也可以相应的添加进来),目的目录不用更改。

在我们新建的组里面,添加调用Revit插件的Addin文件,并且将目的目录,改为对应Revit版本的Addins目录,例如,Revit 2018对应的Addins目录就是:C:\ProgramData\Autodesk\Revit\Addins\2018

1.5、完成脚本向导

在接下来的步骤中,可以根据需要修改相应的参数,或者直接下一步,完成脚本向导。

二、编辑NSIS脚本

Revit插件的Addin文件里面,需要指定插件程序集的路径,而当用户自己选择程序安装路径时,如果Addin文件里面的程序集路径没有做出相应的改变,那么插件就无法正常运行。

2.1、写入替换路径的方法

我们在向导生成的脚本下面,添加一个方法,用来实现安装过程中,就可以将Addin文件里面的程序集路径更改。

Function AdvReplaceInFile
Exch $0 ;file to replace in
Exch
Exch $1 ;number to replace after
Exch
Exch 2
Exch $2 ;replace and onwards
Exch 2
Exch 3
Exch $3 ;replace with
Exch 3
Exch 4
Exch $4 ;to replace
Exch 4
Push $5 ;minus count
Push $6 ;universal
Push $7 ;end string
Push $8 ;left string
Push $9 ;right string
Push $R0 ;file1
Push $R1 ;file2
Push $R2 ;read
Push $R3 ;universal
Push $R4 ;count (onwards)
Push $R5 ;count (after)
Push $R6 ;temp file nameGetTempFileName $R6FileOpen $R1 $0 r ;file to search inFileOpen $R0 $R6 w ;temp fileStrLen $R3 $4StrCpy $R4 -1StrCpy $R5 -1loop_read:ClearErrorsFileRead $R1 $R2 ;read lineIfErrors exitStrCpy $5 0StrCpy $7 $R2loop_filter:IntOp $5 $5 - 1StrCpy $6 $7 $R3 $5 ;searchStrCmp $6 "" file_write1StrCmp $6 $4 0 loop_filterStrCpy $8 $7 $5 ;left part
IntOp $6 $5 + $R3
IntCmp $6 0 is0 not0
is0:
StrCpy $9 ""
Goto done
not0:
StrCpy $9 $7 "" $6 ;right part
done:
StrCpy $7 $8$3$9 ;re-joinIntOp $R4 $R4 + 1
StrCmp $2 all loop_filter
StrCmp $R4 $2 0 file_write2
IntOp $R4 $R4 - 1IntOp $R5 $R5 + 1
StrCmp $1 all loop_filter
StrCmp $R5 $1 0 file_write1
IntOp $R5 $R5 - 1
Goto file_write2file_write1:FileWrite $R0 $7 ;write modified line
Goto loop_readfile_write2:FileWrite $R0 $R2 ;write unmodified line
Goto loop_readexit:FileClose $R0FileClose $R1SetDetailsPrint noneDelete $0Rename $R6 $0Delete $R6SetDetailsPrint bothPop $R6
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Pop $R0
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $0
Pop $1
Pop $2
Pop $3
Pop $4
FunctionEnd

这个方法有三个重载,分别实现三个不同的功能,基本都是需要输入一个被替换的字符串和一个替换的字符串,将路径文件进行相应的更改。

#用法一:
Push hello #被替换的
Push blah #用这个来替换
Push 3 #第 3 次出现后开始替换
Push 4 #替换接下来的4个匹配项
Push C:\temp1.bat #要替换的文件Call AdvReplaceInFile
#用法二:
Push hello #被替换的
Push blah #用这个来替换
Push 3 #第 3 次出现后开始替换
Push all #替换所有其他匹配项
Push C:\temp1.bat #要替换的文件Call AdvReplaceInFile
#用法三:
Push hello #被替换的
Push blah #用这个来替换
Push all #替换所有匹配项
Push all #替换所有匹配项
Push C:\temp1.bat #要替换的文件Call AdvReplaceInFile

添加方法后的文件如图所示:

2.2在安装程序时调用方法来替换Addin文件中程序集的路径

在 Section “Revit 2018” SEC02 处,我们在Section体中,调用替换的方法:

Section "Revit 2018" SEC02SetOutPath "C:\ProgramData\Autodesk\Revit\Addins\2018"File "I:\Revit二次开发\9 程序打包安装\ProgramPackage.addin"Push <Assembly>ProgramPackage.dll</Assembly> #要替换的文本
Push <Assembly>$INSTDIR\ProgramPackage.dll</Assembly> #替换为
Push all #替换所有匹配项
Push all #替换所有匹配项
Push C:\ProgramData\Autodesk\Revit\Addins\2018\ProgramPackage.addin #要替换的文件Call AdvReplaceInFile
SectionEnd

$INSTDIR是一个变量,保存着主程序的安装路径,即用户自己选择的安装路径。

三、编译并运行脚本,测试安装程序

保存好脚本之后,就可以安装程序来测试一下了:

可以在选择组件界面,选择对应的Revit版本进行安装,这里为了测试,我把两个都选择安装。

为了测试,我们将安装目录更换为D盘:

安装完成之后,我们可以看到Revit 2018的Addin文件中,程序集路径已经修改为了我们的安装路径,此时插件可以正常运行。

而在Revit 2019的Addin文件中,程序集路径没有被修改,此时插件不能正常运行。
原因是,我们在Section “Revit 2019” SEC03中,并没有调用修改程序集路径的方法。
各位只需要根据需求,在相应的Section 中调用修改程序集路径的方法,即可完成Revit多版本的安装。

文中的NSIS脚本我已经上传,欢迎下载:NSIS脚本下载链接(免费)

本人才疏学浅,如有疏漏,敬请指正。欢迎互相交流学习!

使用NSIS制作多版本Revit插件(Revit二次开发)相关推荐

  1. 橄榄山建立的Revit二次开发2群317179938,专门讨论Revit和BIM二次开发问题

    橄榄山Revit二次开2群317179938开通,里面有近百人讨论Revit和BIM二次开发.欧特克的研发部门以及ADN开发技术咨询部门也有牛人在其中. 由于本博创业后各种事情比较多,没有太多时间来答 ...

  2. cad通过钢筋大样生成钢筋明细表插件_Revit二次开发——自动生成构件图(总结)...

    之前测试导出构件图的功能实现,拆分了各模块分布进行测试:Revit二次开发--一键导出构件图(1) Revit二次开发--叠合板自动配筋(2) Revit二次开发--自动标注钢筋思路(3) 本篇为这个 ...

  3. Revit插件推荐[二]

    [DFreeTools]-Add View To Sheet 将视图添加到图纸里 [DFreeTools]-Quick CropView 快速应用裁剪视图,启用命令后在平面视图或三维视图划定范围即可. ...

  4. abaqus对应python版本_关于ABAQUS二次开发使用的Python版本?

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. Revit插件推动建筑行业BIM“正向设计”发展

    说到BIM的正向设计与传统设计的区别,可能每个BIMer都有自己的烦恼吧. 为什么别人可以出图那么快.效率那么高.发量还可以那么多---.到底用了什么插件? 到底是BIM让谁不爽了呢? 一个工程施工的 ...

  6. bim出图软件,能够一键开洞的revit插件

    在Revit上真的能做到一键开洞!不管你之前信不信,但马上你就会信了! 话说回来,在BIM建模中Revit中要进行墙板开洞确实是一件比较麻烦的事.因为还要涉及到定位.模型扣减还有土建与机电专业的协调等 ...

  7. Revit二次开发案例一(第1讲)

    这期起,将为大家带来二次开发的小案例讲解,通过借助Revit建模与二次开发,帮助大家快速提高开发水平,快快参加吧!!! 族实例是通过族类型创建的,而创建族实例是Revit二次开发尤其重要的,因此小伙伴 ...

  8. sw槽钢插件_基于VB.NET的SolidWorks型钢库的二次开发

    1 引言 型钢广泛应用在机械.建筑.航空航天等领域.在三维建模与设计中,一般同一系列的型钢具有相似的截面形状,利用三维软件绘制其截面草图并调用拉伸命令即可完成建模.常用型钢包括:角钢.槽钢.T型钢.H ...

  9. 使用NSIS制作revit插件安装包

    这里写自定义目录标题 使用NSIS制作revit插件安装包 下载 Addin文件 修改脚本文件 使用NSIS制作revit插件安装包 下载 NSIS DOWNLOAD HM NSIS Addin文件 ...

最新文章

  1. Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
  2. CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)
  3. Go基础编程:基础数据类型
  4. SiameseRPN详解
  5. volatile的应用
  6. python获取shell输出及返回码_如何执行shell命令获取Python中命令后的输出和pwd
  7. 认识Linux系统中的inode,硬链接和软链接
  8. 【算法】剑指 Offer 63. 股票的最大利润
  9. 华为云新春送福,大吉大利今晚红包雨!
  10. Oracle 过程中检查数据表存在与否
  11. Google GPS在Android上的一些应用
  12. 利用kd树实现最近邻搜索
  13. python大漠插件官网视频教程_python调用大漠插件教程01注册大漠
  14. Honeywell全系列打印机驱动interdriver 2019.M-3
  15. deepinIDEA快捷方式无法启动解决
  16. Linux内存占用过高排查过程
  17. 一个玩游戏的失足青年,转行做软件开发的挣扎过程(1)
  18. 利用棋盘格图案完成相机标定
  19. python输入二维数组_Python输入二维数组方法
  20. Easyui datagrid detailview使用简介

热门文章

  1. Vuforia提高识别以及稳定性方法总结
  2. 如何让Flex AIR压缩解压缩库airxzip也支持中文文件名
  3. mysql自动备份脚本下载+简单解读
  4. 爱你,是一种流泪的幸福
  5. 《鱿鱼游戏》全球大火,奈飞却难借IP变现成为“大赢家”
  6. 为何要从用户角度出发来思考问题
  7. 2021年计算机专业工作规划,2021最新计算机课教学计划
  8. 雪亮工程 视频分类总结
  9. P-NUCLEO-IHM001 电机开发套件(一)
  10. 2022-2028全球碳纤维山地自行车行业调研及趋势分析报告