revit二次开发——制作插件安装包,自动写addin文件

本文介绍了如何使用VisualStudio的SetupProject来创建安装包,包括添加应用程序文件、设置卸载程序、配置依赖框架,并详细讲解了自定义安装类的创建,以实现自动写入addin文件的操作。此外,还涵盖了安装、提交、回滚和卸载等自定义操作的添加步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作

1、打开visual studio
2、打开 工具—>扩展
3、搜索 installer,安装Microsoft Visual Studio Installer Projects
在这里插入图片描述

安装包制作

1、新建项目,选中Setup Project

在这里插入图片描述

2、进入项目,在Application Folder里添加要打包的文件

在这里插入图片描述

2.1 文件夹说明

  1. Application Folder : 应用程序包含的文件设置。
  2. User’s Desktop : 用户桌面快捷方式设置。
  3. User’s Programs Menu : 用户启动菜单的快捷方式设置。

2.2添加卸载程序

  1. 卸载功能实现: C:\Windows\System32\msiexec.exe
  2. 在 Application Folder 文件夹中添加 msiexec.exe ,创建快捷方式,并设置属性 Arguments=/x {1028BF2E-832F-4B79-8D54-01CFB4BB30EC}
    (备注:{1028BF2E-832F-4B79-8D54-01CFB4BB30EC} 为 Setup项目属性中的ProductCode,当项目属性中ProductCode改变时,卸载这里的Arguments需要跟着改变)

2.3依赖框架

右键Setup项目–>属性–>Prerequisites
在系统必备的窗体中,勾选Framework 4.6(开发的应用程序所使用的Framework版本,示例中为4.6),选择【从组件供应商的网站上下载系统必备组件】(此选项会提示客户去微软官网下载Framework 4.6 )。
指定系统必备组件的安装位置其他选项:需要提前把Framework 指定版本的安装包下载下来放置相应目录下
启动条件:右键Setup项目–>View–>启动条件,.NET Framework属性Version修改为.NET Framework 4.6(与系统必备Framework版本一致)

3、以上配置完成,编译Setup项目即可在“Setup项目/Release”生成安装包。

自定义安装程序类

• 制作安装程序时,可以添加自定义安装程序类,在此类中编写安装过程中的一些自定义操作。
• 添加自定义安装操作类。
在这里插入图片描述
•打包程序增加自定义操作

1.Setup项目右键–>View–>自定义操作,可以看到有四个子项:安装、提交、回滚、卸载,如右图所示

2.在Install上点击右键–>添加自定义操作–>Application Folder -->【主输出】(这样,重新生成后,安装之后就会执行 OnBeforeInstall 、 OnAfterInstall 、 BeforeInstall事件、 AfterInstall事件的代码了。)

示例:自动写addin文件

public class Installer1:Installer
    {
        private IContainer components = null;
        public Installer1()
        {
            InitializeComponent();
            base.BeforeInstall += InstallerTest_BeforeInstall;
            base.AfterInstall += InstallerTest_AfterInstall;
            base.AfterUninstall += InstallerTest_AfterUninstall;
        }

        private void InstallerTest_AfterUninstall(object sender, InstallEventArgs e)
        {
            string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string path = folderPath + "\\Autodesk\\Revit\\Addins\\2018\\test.addin";
            try
             {
                 if (File.Exists(path))
                 {
                     File.Delete(path);
                 }
             }
             catch (Exception)
             {

             }
                
            }

        private void InstallerTest_AfterInstall(object sender, InstallEventArgs e)
        {
            string text = "test";
            string directoryName = Path.GetDirectoryName(typeof(Installer1).Assembly.Location);
            string text2 = directoryName + "\\test Program\\" + text + ".dll";
            string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string path = folderPath + "\\Autodesk\\Revit\\Addins\\2018\\test.addin";
            string text3 = Guid.NewGuid().ToString();
                try
                {
                    if (File.Exists(item))
                    {
                        File.Delete(item);
                    }
                

                    File.WriteAllLines(item, new List<string>
                    {
                        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
                        "<RevitAddIns>",
                        "<AddIn Type=\"Application\">",
                        "<VendorId>ADSK</VendorId>",
                        "<Name>test</Name>",
                        "<Assembly>" + text2 + "</Assembly>",
                        "<AddInId>" + text3 + "</AddInId>",
                        "<FullClassName>" + text + ".App</FullClassName>",
                        "<VendorDescription>Zobon, www.zobonbim.com</VendorDescription>",
                        "</AddIn>",
                        "</RevitAddIns>"
                    }.ToArray(), Encoding.UTF8);

                }
                catch (Exception)
                {
                }   
        }

        private void InstallerTest_BeforeInstall(object sender, InstallEventArgs e)
        {
            //什么也不做
        }

        private void InitializeComponent()
        {
            components = new Container();
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值