使用NSIS制作多版本Revit插件(Revit二次开发)
因为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二次开发)相关推荐
- 橄榄山建立的Revit二次开发2群317179938,专门讨论Revit和BIM二次开发问题
橄榄山Revit二次开2群317179938开通,里面有近百人讨论Revit和BIM二次开发.欧特克的研发部门以及ADN开发技术咨询部门也有牛人在其中. 由于本博创业后各种事情比较多,没有太多时间来答 ...
- cad通过钢筋大样生成钢筋明细表插件_Revit二次开发——自动生成构件图(总结)...
之前测试导出构件图的功能实现,拆分了各模块分布进行测试:Revit二次开发--一键导出构件图(1) Revit二次开发--叠合板自动配筋(2) Revit二次开发--自动标注钢筋思路(3) 本篇为这个 ...
- Revit插件推荐[二]
[DFreeTools]-Add View To Sheet 将视图添加到图纸里 [DFreeTools]-Quick CropView 快速应用裁剪视图,启用命令后在平面视图或三维视图划定范围即可. ...
- abaqus对应python版本_关于ABAQUS二次开发使用的Python版本?
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- Revit插件推动建筑行业BIM“正向设计”发展
说到BIM的正向设计与传统设计的区别,可能每个BIMer都有自己的烦恼吧. 为什么别人可以出图那么快.效率那么高.发量还可以那么多---.到底用了什么插件? 到底是BIM让谁不爽了呢? 一个工程施工的 ...
- bim出图软件,能够一键开洞的revit插件
在Revit上真的能做到一键开洞!不管你之前信不信,但马上你就会信了! 话说回来,在BIM建模中Revit中要进行墙板开洞确实是一件比较麻烦的事.因为还要涉及到定位.模型扣减还有土建与机电专业的协调等 ...
- Revit二次开发案例一(第1讲)
这期起,将为大家带来二次开发的小案例讲解,通过借助Revit建模与二次开发,帮助大家快速提高开发水平,快快参加吧!!! 族实例是通过族类型创建的,而创建族实例是Revit二次开发尤其重要的,因此小伙伴 ...
- sw槽钢插件_基于VB.NET的SolidWorks型钢库的二次开发
1 引言 型钢广泛应用在机械.建筑.航空航天等领域.在三维建模与设计中,一般同一系列的型钢具有相似的截面形状,利用三维软件绘制其截面草图并调用拉伸命令即可完成建模.常用型钢包括:角钢.槽钢.T型钢.H ...
- 使用NSIS制作revit插件安装包
这里写自定义目录标题 使用NSIS制作revit插件安装包 下载 Addin文件 修改脚本文件 使用NSIS制作revit插件安装包 下载 NSIS DOWNLOAD HM NSIS Addin文件 ...
最新文章
- Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
- CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)
- Go基础编程:基础数据类型
- SiameseRPN详解
- volatile的应用
- python获取shell输出及返回码_如何执行shell命令获取Python中命令后的输出和pwd
- 认识Linux系统中的inode,硬链接和软链接
- 【算法】剑指 Offer 63. 股票的最大利润
- 华为云新春送福,大吉大利今晚红包雨!
- Oracle 过程中检查数据表存在与否
- Google GPS在Android上的一些应用
- 利用kd树实现最近邻搜索
- python大漠插件官网视频教程_python调用大漠插件教程01注册大漠
- Honeywell全系列打印机驱动interdriver 2019.M-3
- deepinIDEA快捷方式无法启动解决
- Linux内存占用过高排查过程
- 一个玩游戏的失足青年,转行做软件开发的挣扎过程(1)
- 利用棋盘格图案完成相机标定
- python输入二维数组_Python输入二维数组方法
- Easyui datagrid detailview使用简介