跳到主要内容

手动注册安装SOLIDWORKS插件

本文介绍如何手动部署和注册SOLIDWORKS插件。

部署二进制文件

项目成功编译后,所有所需的二进制文件和数据文件都会放置在输出文件夹中。

包含二进制输出的文件夹{ width=350 }

在部署产品(插件或独立应用程序)时,必须部署所有文件(包括任何第三方dll或互操作文件)。您可以排除任何支持文件,如pdb文件或xml文档文件。

注册插件

仅将文件复制到用户计算机上还不足以在目标系统上注册插件。还需要注册插件的COM对象,并在注册表中添加相应的条目。

要注册.NET插件(C#或VB.NET),需要使用/regasm选项调用程序集注册工具(regasm)

"%Windir%\Microsoft.NET\Framework64\v4.0.30319\regasm" /codebase "插件DLL的路径"

如果注册成功,将显示类似以下的消息:

成功注册COM类型{ width=500 }

根据插件编译的目标框架,需要使用正确版本的框架。

要注册COM插件(C++),需要调用regsvr32实用程序。

注册通常需要以管理员身份运行命令提示符

除非明确要求,否则不需要为独立应用程序注册COM对象。

添加注册表信息

需要将有关插件的信息添加到注册表中,以便SOLIDWORKS可以正确加载插件。可以创建一个注册表文件,将此信息添加到注册表中。

添加到HKEY_LOCAL_MACHINE的键是必需的,并且用于在插件列表中显示插件。添加到HKEY_CURRENT_USER的键是可选的,并表示插件的启动状态。将值设置为1以在启动时加载插件,设置为0以在启动时不加载插件。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks\Addins\{a377433e-f7cf-4a5a-9d74-b64c0c1758c2}]
@=dword:00000001
"Description"="示例插件描述"
"Title"="示例插件"

[HKEY_CURRENT_USER\Software\SolidWorks\AddInsStartup\{a377433e-f7cf-4a5a-9d74-b64c0c1758c2}]
@=dword:00000001

上面示例中使用的GUID是通过在插件类上设置GuidAttribute来设置的:

[Guid("a377433e-f7cf-4a5a-9d74-b64c0c1758c2"), ComVisible(true)]
[SwAddin(Description = "示例插件", Title = "示例插件描述", LoadAtStartup = true)]
public class MyAddIn : ISwAddin
{
...
}

作为替代选项,可以在将其注册为COM对象时,直接从dll中添加所需的注册表键,通过ComRegisterFunctionAttribute。在这种情况下,不需要上述步骤:

#region SolidWorks 注册

[ComRegisterFunction]
public static void RegisterFunction(Type t)
{
try
{
var att = t.GetCustomAttributes(false).OfType<SwAddinAttribute>().FirstOrDefault();

if (att == null)
{
throw new NullReferenceException($"{typeof(SwAddinAttribute).FullName} is not set on {t.GetType().FullName}");
}

Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine;
Microsoft.Win32.RegistryKey hkcu = Microsoft.Win32.Registry.CurrentUser;

string keyname = "SOFTWARE\\SolidWorks\\Addins\\{" + t.GUID.ToString() + "}";
Microsoft.Win32.RegistryKey addinkey = hklm.CreateSubKey(keyname);
addinkey.SetValue(null, 0);

addinkey.SetValue("Description", att.Description);
addinkey.SetValue("Title", att.Title);

keyname = "Software\\SolidWorks\\AddInsStartup\\{" + t.GUID.ToString() + "}";
addinkey = hkcu.CreateSubKey(keyname);
addinkey.SetValue(null, Convert.ToInt32(att.LoadAtStartup), Microsoft.Win32.RegistryValueKind.DWord);
}
catch (Exception ex)
{
Console.WriteLine("注册插件时出错:" + ex.Message);
}
}

[ComUnregisterFunction]
public static void UnregisterFunction(Type t)
{
try
{
Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine;
Microsoft.Win32.RegistryKey hkcu = Microsoft.Win32.Registry.CurrentUser;

string keyname = "SOFTWARE\\SolidWorks\\Addins\\{" + t.GUID.ToString() + "}";
hklm.DeleteSubKey(keyname);

keyname = "Software\\SolidWorks\\AddInsStartup\\{" + t.GUID.ToString() + "}";
hkcu.DeleteSubKey(keyname);
}
catch (Exception e)
{
Console.WriteLine("取消注册插件时出错:" + e.Message);
}
}

#endregion

取消注册插件

要取消注册.NET插件,需要使用/u选项调用程序集注册工具(regasm)

"%Windir%\Microsoft.NET\Framework64\v4.0.30319\regasm" /u /codebase "插件DLL的路径"

取消注册插件后,控制台将显示以下消息:

成功取消注册COM类型{ width=500 }

要取消注册COM插件,需要使用/regsvr32实用程序并带有/u标志。

要清除注册表值(除非通过ComUnregisterFunctionAttribute完成),请调用以下注册表文件:

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks\Addins\{a377433e-f7cf-4a5a-9d74-b64c0c1758c2}]
@=dword:00000001
"Description"="示例插件描述"
"Title"="示例插件"

[-HKEY_CURRENT_USER\Software\SolidWorks\AddInsStartup\{a377433e-f7cf-4a5a-9d74-b64c0c1758c2}]
@=dword:00000001

最佳实践

可以将注册和取消注册命令放入单个批处理文件中,以简化注册和取消注册过程:

Register.bat

"%windir%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /codebase "%~dp0CodeStack.StockFit.Sw.dll"
regedit.exe /S %~dp0add-registry.reg
pause

Unregister.bat

"%windir%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /codebase /u "%~dp0CodeStack.StockFit.Sw.dll"
regedit.exe /S %~dp0remove-registry.reg
pause

更改插件的名称并将这些文件放入bin文件夹中,只需在客户机上运行此批处理文件即可。