启动特定版本的Inventor

Inventor SDK入门---环境搭建 Inventor SDK入门---环境搭建,快速建立一个Inventor Addin项目 阅读详情

大多数情况下,一台机器上可能会装有几个版本的Inventor,尤其开发者的机器。我同事写了篇文章,介绍如何启动特定版本的Inventor。原文地址:

Running programmatically a specific version of Inventor

大家知道,从独立应用程序(EXE)启动Inventor,基本步骤如下。从注册表找到Inventor Application组件信息,然后调用CreateInstance启动。

Type inventorAppType =
     System.Type.GetTypeFromProgID(
     "Inventor.Application");
 
Inventor.Application app =  
    System.Activator.CreateInstance(
      inventorAppType)                          
           as Inventor.Application;

若你做过AutoCAD二次开发,可能知道,AutoCAD也有COM API,也能实现启动AutoCAD进程,而且能够指定版本,形如 “AutoCAD.Application.19.1”,将启动AutoCAD 2014. 但Inventor无此机制。那么要启动特定版本的Inventor,如何做呢?以下是个我们提供的工具类AdnInventorLoader, 提供了两种方式:
AdnInventorLoader.CreateInstanceFromProcess
该方法将读取特定版本Inventor注册信息,然后获取到对应Inventor.exe所在路径,最后启动该exe。
AdnInventorLoader.CreateInstanceFromCLSID
该方法也是先读取特定版本Inventor注册信息,然后获取到对应Inventor.exe所在路径。但接着它并不是直接启动exe,而是去改变最后一次启动的Inventor版本。当然,该方法可能需要管理员权限或特别的用户权限。
因此,可能方法1更适合你。

// Utility Class to launch specific version
// of Inventor Application
// By Philippe Leefsma, May 2013 – Devtech
class AdnInventorLoader
{
    public enum Version
    {
        Inventor_2010,
        Inventor_2011,
        Inventor_2012,
        Inventor_2013,
        Inventor_2014
    };
 
    public static Inventor.Application
        CreateInstanceFromProcess(Version version)
    {
        try
        {
            string exePath = GetExePath(version);
 
            if (exePath != string.Empty)
            {
                CleanUpRegistry();
 
                System.Diagnostics.Process process =
                    System.Diagnostics.Process.Start(
                        exePath);
 
                if (process != null)
                {
                    //Wait for 5 Mins
                    if (process.WaitForInputIdle(
                        300000))
                    {
                        Inventor.Application app =
                            Marshal.GetActiveObject(
                               "Inventor.Application")
                              as Inventor.Application;
 
                        return app;
                    }
                }
            }
 
            return null;
        }
        catch
        {
            return null;
        }
    }
 
    public static Inventor.Application
        CreateInstanceFromCLSID(Version version)
    {
        try
        {
            string exePath = GetExePath(version);
 
            if (exePath != string.Empty)
            {
                CleanUpRegistry();
 
                using (RegistryKey inventorKey =
                    Registry.ClassesRoot.
                        OpenSubKey("CLSID").
                        OpenSubKey("").
                        OpenSubKey("LocalServer32",
                            true))
                {
                    string[] names =
                         inventorKey.GetValueNames();
 
                    inventorKey.SetValue(
                        names[0],
                        exePath + " /Automation");
 
                    inventorKey.Close();
 
                    Type inventorAppType =
                        System.Type.GetTypeFromProgID(
                            "Inventor.Application");
 
                    Inventor.Application app =
                      System.Activator.CreateInstance(
                          inventorAppType)
                            as Inventor.Application;
 
                    return app;
                }
            }
 
            return null;
        }
        catch
        {
            return null;
        }
    }
 
    // Clean up registry to prevent
    // "Re-registration" dialog
    // http://tinyurl.com/dx4tsnu
    private static bool CleanUpRegistry()
    {
        try
        {
            using (RegistryKey inventorKey =
                Registry.CurrentUser.
                    OpenSubKey("Software").
                    OpenSubKey("Autodesk").
                    OpenSubKey("Inventor").
                    OpenSubKey("Current Version", 
                       true))
            {
                if (inventorKey == null)
                    return false;
 
                inventorKey.DeleteValue(
                    "Executable");
                inventorKey.DeleteValue(
                    "LastVersionRun");
                inventorKey.DeleteValue(
                    "Registered");
                inventorKey.DeleteValue(
                    "RegistryVersion");
                inventorKey.DeleteValue(
                    "SilentMode");
                inventorKey.DeleteValue(
                    "UBI");
 
                inventorKey.Close();
 
                return true;
            }
        }
        catch
        {
            return false;
        }
    }
 
    // Retrieve Inventor.exe fullpath based on version
    private static string GetExePath(Version version)
    {
        try
        {
            string key = string.Empty;
 
            switch (version)
            {
                case Version.Inventor_2010:
                    key = "RegistryVersion14.0";
                    break;
                case Version.Inventor_2011:
                    key = "RegistryVersion15.0";
                    break;
                case Version.Inventor_2012:
                    key = "RegistryVersion16.0";
                    break;
                case Version.Inventor_2013:
                    key = "RegistryVersion17.0";
                    break;
                case Version.Inventor_2014:
                    key = "RegistryVersion18.0";
                    break;
                default:
                    return string.Empty;
            }
 
            using (RegistryKey inventorKey =
                Registry.LocalMachine.
                    OpenSubKey("SOFTWARE").
                    OpenSubKey("Autodesk").
                    OpenSubKey("Inventor").
                    OpenSubKey(key))
            {
 
                if (inventorKey == null)
                    return string.Empty;
 
                string path = inventorKey.GetValue(
                  "InventorLocation")
                    as string;
 
                inventorKey.Close();
 
                path += "\\Inventor.exe";
 
                return (System.IO.File.Exists(path) ?
                    path :
                    string.Empty);
            }
        }
        catch
        {
            return string.Empty;
        }
    }
}
 
Here are examples of use for both methods:
 
Inventor.Application app =
    AdnInventorLoader.CreateInstanceFromProcess(
        AdnInventorLoader.Version.Inventor_2013);
 
if (app != null)
   app.Visible = true;
 
             -------------------------
 
Inventor.Application app =
    AdnInventorLoader.CreateInstanceFromCLSID(
        AdnInventorLoader.Version.Inventor_2014);
   
if (app != null)
   app.Visible = true;



Inventor SDK开发环境配置全攻略——从安装到首个插件测试 本文提供了Autodesk Inventor SDK开发环境配置的完整指南,涵盖从软件安装、SDK工具部署到Visual Studio项目创建的全过程。详细解析了插件核心结构与加载机制,并通过一个简单的“Hello World”示例演示了从编码、编译到在Inventor中成功加载测试的完整链路,帮助开发者快速搭建Inventor二次开发环境并迈出第一步。 阅读详情

相关推荐

Inventor SDK开发环境配置全攻略---从安装到首个插件实战

本文提供了一份详细的Autodesk Inventor SDK开发环境配置与入门实战指南。从SDK工具包的安装、Visual Studio集成,到创建首个插件项目并实现基础功能,手把手教你完成从环境搭建到插件部署调试的全过程,帮助机械工程师和开发者快速掌握Inventor二次开发的核心技能。

dog123的博客 271

探索跨平台设计新纪元:InventorLoader开源项目推荐

探索跨平台设计新纪元:InventorLoader开源项目推荐 在数字设计和制造领域,软件间的互操作性一直是工程师们的一大挑战。今天,我们带来一款突破性的工具——InventorLoader,它架起了Autodesk Inventor与FreeCAD之间的桥梁,让数据的流通更为顺畅。如果你在寻找能够无缝集成Inventor文件到FreeCAD环境的解决方案,那么这篇文章就是为你准备的。 项目介绍 ...

gitblog_00482的博客 822

保姆级教程:用MIT App Inventor给Arduino机械臂小车做个专属遥控App(附完整积木代码)

本文提供了一份详细的保姆级教程,教你如何使用MIT App Inventor为Arduino机械臂小车打造专属遥控App。通过蓝牙通信实现手机App与Arduino的完美联动,涵盖界面设计、蓝牙连接、机械臂控制、小车运动控制等核心功能,并附完整积木代码,助你零代码完成智能遥控App开发。

congyaguan5319的博客 418

用程序启动Inventor失败的原因和解决方法

有时候用 "CreateObject("Inventor.Application")"来启动Inventor会失败,但是随后再执行这个命令时Inventor又会成功启动,这是怎么回事?下面是我们的技术专家的解释以及解决办法: Inventor starts up very slowly when none of its DLLs are in the systems file cache.

CAD定制乐园 8577

CAM软件:Autodesk Inventor二次开发

除了基本的自动化任务,二次开发还可以用于创建自定义用户界面,提高用户体验。下面是一个创建自定义命令栏和对话框的示例。创建自定义命令栏使用对象创建新的命令栏。为命令栏添加自定义命令。创建自定义对话框使用创建对话框。通过API获取用户输入并执行相应操作。// 获取命令栏集合// 创建新的命令栏。

kkchenjj的博客 1610

深入探索Inventor与X窗口系统的交互

本文将详细介绍Inventor与X窗口系统的交互机制,包括渲染区域小部件的使用、事件处理以及场景管理器的功能。通过这些内容,读者将能够理解如何在不依赖特定窗口系统的情况下,使用Inventor进行3D编程和事件处理。

weixin_36303807的博客 366

c# Inventor二次开发 静默运行

要批量处理图档时,总是会遇到各种奇奇怪怪的弹窗,还需要用户手动关闭。这个时候需要执行静默运行的命令。

weixin_44957634的博客 288

Inventor 2014产品设计:提手实例教程

本文还有配套的精品资源,点击获取 简介:Autodesk Inventor 2014是一款集建模、渲染、动画等多功能于一体的3D机械设计软件。本教程通过“提手”设计案例,详细讲解了从基础建模、编辑特征到参数化设计、钣金工具、装配设计、工程图生成及仿真分析的完整产品设计流程。学习本教程能够提升用户在3D产品设计方面的能力,尤其适合那些希望通过实践案例来掌握Inventor软件...

weixin_31569663的博客 1346

inventor应用程序错误---解决方法

inventor应用程序错误---解决方法

qq_38472451的博客 5217

STM32duino LSM6DSO驱动库:低功耗IMU工程化实践

惯性测量单元(IMU)是智能终端与工业设备实现运动感知的核心传感器,其性能关键在于数据精度、实时响应与系统功耗的协同优化。LSM6DSO作为集成加速度计与陀螺仪的六轴MEMS器件,依托片上有限状态机(FSM)和机器学习核心(MLC),支持自由落体检测、计步器、6D方向识别等硬件自治功能,显著降低主控CPU负载。在STM32平台下,通过深度耦合HAL/LL库、显式引脚管理、DMA加速SPI传输及EXTI中断协同,可实现亚毫秒级事件响应与微安级待机功耗。本文聚焦STM32duino生态中LSM6DSO驱动的工程

weixin_36304957的博客 551

车道线检测(传统基于Opencv的方法)

传统车道线检测方法主要是使用颜色选择、高斯平滑、边缘检测、ROI区域选择、霍夫变换、标定车道边界等Opnecv图像处理操作去检测道路上的车道线,我自己对很多用这类处理对很多道路场景车道线进行过实验,这类算法往往需要人工根据不同街道场景手动去反复调整各算法参数,从而才能使检测效果最佳。

Yangxiaoaijiejie的博客 2073

关于反射中Assembly.CreateInstance()与Activator.CreateInstance()方法

关于Assembly.CreateInstance()与Activator.CreateInstance()方法动态创建类对象,大多是Activator.CreateInstance()和Activator.CreateInstance()方法,非常好用,一般都用了Assembly.Load("AssemblyName").CreateInstance ("ClassName");的方法,研究

daydayup的专栏 1263

交通银行金融科技后端开发实习生面试经验

笔试之路的第一个脚印。不足的地方:基本功不扎实,得补。先补sql(先整理出一篇sql语句做题的文章,争取下次笔试拿下这一块),编程题中的SQL写不出来感觉很丢人。然后补八股文,结合一些网上项目教程,来理解常用的一些八股文(比如各种锁)。

T__TSZ的博客 1725

Inventor记录

SDK路径: C:\Users\Public\Documents\Autodesk\Inventor 2017\SDK API帮助文档: C:\Users\Public\Documents\Autodesk\Inventor 2017\Local Help\admapi_21_0.chm Library文件位置: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Autodesk.Inventor.Interop<strong>v4.0_17.0.0.0__d

穹顶之下 662

AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?

AXI总线的transaction是burst-based的,因此有必要好好研究一下不同burst type的工作原理。此处略过burst的定义以及burst size、burst length等信号的介绍。

qiuzhongyu123的博客 2万+

国外无人机蜂群作战典型战例及发展趋势

参与袭击的无人机为简易组装的固定翼飞机,采用小排量活塞发动机和手机GPS通信模块零件,机翼为轻木加泡沫板混合结构,尾梁为铝合金方管,主要依靠胶带粘接,以上全部配件均可在商用市场买到,成本较低,可在短时间内装配完成。③战场纵深短、瞬时性强。蜂群作战的参战数量显著增加,这一方面得益于无人机技术的飞速发展使得廉价无人机可以大量生产和仿制,另一方面凭借迅速发展的投放和回收技术以及集群控制技术,使得无人机蜂群可在极短时间内实现编队饱和攻击,在快速消耗敌方高价值防空武器系统的同时,保证己方物资系统的突防概率。

renhongxia1的博客 2480

inventor2014 激活失败 错误0015.111 解决方法

终极方案 找到安装源文件夹里的adlmact与adlmact_libFNP文件(通过搜索adlmact找到)替换C盘路径C:\Program Files\Common Files\Autodesk Shared\AdLM\R7文件夹内的两个同名文件. Inventor2014-2020详细安装方法及下载链接都可以在公众号后台回复:inventor 获取 小编在安装过程中遇到的所有问题,在安装方法里都有说明 文章来自公众号:U9软件宝库 ...

weixin_42793435的博客 5697

「免费开源」从 OCR 识别到结构化输出:合同文本高效比对的完整解决方案!

本文将系统拆解这一解决方案的技术逻辑、实施步骤与落地价值,为企业合同管理数字化转型提供实操指南。字段提取:自动识别并提取预设的关键字段(如 “甲方”“乙方”“合同金额”“履约期限” 等),若遇到模糊表述(如 “付款时间为合同签订后 30 个工作日内”),系统可自动解析为 “履约期限:合同签订日 + 30 工作日”;预设结构化字段:根据合同类型(如采购合同、服务合同、租赁合同),定义需提取的关键字段(如 “甲方名称”“乙方名称”“合同金额”“有效期起 / 止日期”“履约地点”“违约金比例” 等);

qxsz_yyh的博客 836

AI2(App Inventor 2)离线版服务器网络版(AI伴侣2.47版)

提供这个版本的原因: 与app.gzjkw.net的源代码版本尽可能的接近,这样导入app.gzjkw.net源文件的时候不会有“该项目由新版App Inventor系统创建,我们仍然尝试将其加载,但可能会存在一定的兼容性问题。”的提示。 软件版本: App Inventor 2版本: https://github.com/mit-cml/appinventor-source...

FsTy的博客 1万+

Halcon手眼标定实战:九点标定法从入门到精通(附完整代码)

本文详细介绍了Halcon环境下九点标定法的完整实现流程,从基础概念到实战技巧,帮助开发者快速掌握手眼标定技术。通过精确采集图像坐标与机械坐标,计算仿射变换矩阵,实现相机与机械臂坐标系的精确映射,适用于工业自动化中的平面定位场景。

v4w5x6的博客 411

手把手教你学PCIE--所有 PF(Physical Function)共同管理和分配 VF

但具体如何分配和使用 VF 取决于硬件设计、驱动程序配置以及实际应用场景。

MHD0815的博客 1462

双击打开Inventor文件

为什么80%的码农都做不了架构师?>>> ...

weixin_33730836的博客 471

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

MIT App Inventor 开源项目完全指南

MIT App Inventor 是一个开源的移动应用开发平台,让没有编程经验的人也能轻松创建Android和iOS应用。该项目基于Google的Blockly项目,提供了可视化编程环境,用户可以通过拖拽组件和代码块来构建应用。 ## 项目简介 MIT App Inventor 由麻省理工学院开发,旨在降低移动应用开发的门槛。它提供了一个完整的开发环境,包括: - **可视化编程界面**:基

gitblog_00815的博客 914

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Inventor 2020 SDK环境搭建避坑指南:从安装到第一个插件开发实战

本文详细介绍了Autodesk Inventor 2020 SDK环境搭建的完整流程,包括必备组件安装、SDK验证、第一个插件开发实战及常见问题解决方案。通过具体代码示例和调试技巧,帮助开发者快速掌握Inventor插件开发的核心技术,避免环境配置中的常见陷阱。

weixin_28335283的博客 335

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

完整掌握MIT App Inventor:可视化编程的简单入门指南

MIT App Inventor作为一款革命性的可视化编程工具,彻底改变了移动应用开发的学习曲线。这个开源平台让编程新手也能轻松构建功能丰富的Android和iOS应用,通过直观的拖拽界面实现复杂功能。无论你是教育工作者、编程爱好者还是创意实现者,这款工具都能为你打开移动应用开发的大门。 ## 🎯 为什么选择可视化编程工具 传统的文本编程需要记忆大量语法规则和命令,而MIT App Inve

gitblog_00375的博客 880

MIT App Inventor完整指南:无需编程经验,5步创建你的第一个移动应用

你是否梦想过开发自己的手机应用,却被复杂的编程语言吓退?MIT App Inventor正是为你准备的完美解决方案!这个由麻省理工学院开发的开源可视化编程平台,让你无需编写一行代码,就能创建功能强大的Android和iOS应用。无论你是编程新手、教育工作者,还是想要快速验证创意的创业者,MIT App Inventor都能让你的想法在几分钟内变成现实应用。 ## 🚀 为什么选择MIT App

gitblog_00195的博客 323
上一篇: Inventor 2014 API 新功能 (11) 戳记 Imprinting
下一篇: 复制图纸标题栏提示字串结果文本到另外的图纸
autodeskinventorapi
博客等级 码龄14年 313粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值