.Net程序自动加载管理器
本帖最后由 作者 于 2009-9-3 9:38:17 编辑2009/9/3
Ver1.0(.Net Framework 2.0)
1、初始化文件更改为读写注册表
2、加入重新载入功能,以防注册表信息误删除
3、双击可运行命令(测试功能)
2009/8/30
放弃运行命令的功能,没有实用价值
界面基本完善,添加程序集启动方式的选择
2009/8/29
1、命令文件改用二进制文件存储
2、提供简化的通讯录管理程序测试
3、注意,程序初次运行应将Assx文件删除
4、去除一些Bug
2009/8/28
1、归并数据文件
2、去除Ass文件的多余属性
2009/8/27试用版本
功能改进:
1、完善管理界面
2、加入被管理程序的命令帮助的功能
3、管理界面添加程序时,直接导入程序
注意,程序运行过程中会在被管理文件的同目录生成一些ass/assx/cmds文件,请勿删
正式版本会把这些文件归并到同一目录
后期考虑直接从界面运行命令
简化的版本,开源:)
运行效果:
1、第一次netload加载该程序加载自定义文件成功。自定义组: ACAD
加载自定义文件成功。自定义组: CUSTOM
加载自定义文件成功。自定义组: EXPRESS
正在重生成模型。
AutoCAD Express Tools Copyright ?2002-2004 Autodesk, Inc.
AutoCAD 菜单实用程序已加载。
命令: COMMANDLINE
命令: netload
NetAutoLoad 已加载!
检查注册表......
未发现NetAutoLoad的自动加载项,重新载入......
自动加载项设置成功!
检查序列化文件......OK!
检查注册表加载项......
TlsCad(TlsCad 0.2 For AutoCad)未正确注册!......OK!
TlsCad Load!
TlsAddressList(TlsAddressList 1.0 For AutoCad)未正确注册!......OK!
2、以后运行,程序及被管理项会在AutoCad启动时加载加载自定义文件成功。自定义组: ACAD
加载自定义文件成功。自定义组: CUSTOM
加载自定义文件成功。自定义组: EXPRESS
正在重生成模型。
NetAutoLoad 已加载!
检查注册表......OK!
检查序列化文件......OK!
检查注册表加载项......
TlsCad(TlsCad 0.2 For AutoCad)已注册!
TlsAddressList(TlsAddressList 1.0 For AutoCad)已注册!
TlsCad Load!
AutoCAD Express Tools Copyright ?2002-2004 Autodesk, Inc.
AutoCAD 菜单实用程序已加载。
命令: COMMANDLINE
3、后期将加入管理界面,简化序列化文件的输入,可能加入被管理程序的命令帮助的功能:)
你好如何使用工具 using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.IO;
using System.Collections;
using Microsoft.Win32;
using Autodesk.AutoCAD.DatabaseServices;
namespace TlsCad.NetAutoLoad
{
public class Module
{
public string Name;
public string Location;
public bool Load;
public long Loadctrls;
public string Description;
private static List<string> _regApps;
public Module() { }
public Module(string name, string location, bool load,int loadctrls, string description)
{
Name = name;
Location = location;
Load = load;
Loadctrls = loadctrls;
Description = description;
}
public bool SearchForReg()
{
if (_regApps == null)
{
RegistryKey appkey = GetAcAppKey(false);
_regApps = new List<string>(appkey.GetSubKeyNames());
appkey.Close();
}
return _regApps.Contains(Name);
}
public void RegApp()
{
RegistryKey appkey = GetAcAppKey(true);
RegistryKey rk = appkey.CreateSubKey(Name);
rk.SetValue("DESCRIPTION", Name, RegistryValueKind.String);
rk.SetValue("LOADCTRLS", Loadctrls, RegistryValueKind.DWord);
rk.SetValue("LOADER", Location, RegistryValueKind.String);
rk.SetValue("MANAGED", 1, RegistryValueKind.DWord);
appkey.Close();
}
private RegistryKey GetAcAppKey(bool writable)
{
RegistryKey ackey =
Registry.CurrentUser.OpenSubKey(
HostApplicationServices.Current.RegistryProductRootKey);
return ackey.OpenSubKey("Applications", writable);
}
}
public class ModuleCollection : ICollection
{
private List<Module> lst = new List<Module>();
public Module this
{
get { return (Module)lst; }
}
public void Add(Module mod)
{
lst.Add(mod);
}
public void Remove(Module mod)
{
lst.Remove(mod);
}
public void WriteXml(string path)
{
try
{
XmlSerializer xs = new XmlSerializer(typeof(ModuleCollection));
StreamWriter sw = new StreamWriter(path);
xs.Serialize(sw, this);
sw.Close();
}
catch
{ }
}
public void ReadXml(string path)
{
try
{
XmlSerializer xs = new XmlSerializer(typeof(Module[]));
StreamReader sr = new StreamReader(path);
Module[] ps = ((Module[])xs.Deserialize(sr));
sr.Close();
for (int i = 0; i < ps.Length; Add(ps)) ;
}
catch
{ }
}
#region ICollection 成员
public void CopyTo(Array array, int index)
{
lst.CopyTo((Module[])array, index);
}
public int Count
{
get { return lst.Count; }
}
public bool IsSynchronized
{
get { return false; }
}
public object SyncRoot
{
get { return this; }
}
#endregion
#region IEnumerable 成员
public IEnumerator GetEnumerator()
{
return lst.GetEnumerator();
}
#endregion
}
} using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace TlsCad.NetAutoLoad
{
class MyArx
{
public static Assembly CurAssembly
{
get { return (new MyArx()).GetType().Assembly; }
}
public static string Location
{
get { return CurAssembly.Location; }
}
public static string MainPath
{
get
{
string s = Location;
return s.Substring(0, s.LastIndexOf("\\"));
}
}
}
} using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Reflection;
using Microsoft.Win32;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
namespace TlsCad.NetAutoLoad
{
public class TlsApplication : IExtensionApplication
{
#region IExtensionApplication 成员
private static ModuleCollection _modules = new ModuleCollection();
public void Initialize()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("\nNetAutoLoad 已加载!");
//查找注册表键值
ed.WriteMessage("\n\n检查注册表......");
Module module = new Module(
"NetAutoLoad",
MyArx.Location,
false,
2,
"NetApi Manger For AutoCad");
if (module.SearchForReg())
{
ed.WriteMessage("OK!");
}
else
{
ed.WriteMessage("\n未发现NetAutoLoad的自动加载项,重新载入......");
module.RegApp();
ed.WriteMessage("\n自动加载项设置成功!");
}
DirectoryInfo di = new DirectoryInfo(MyArx.MainPath);
//查找序列化文件
ed.WriteMessage("\n\n检查序列化文件......");
if (di.GetFiles("NetAutoLoad.xml").Length == 0)
{
ed.WriteMessage("\n未发现序列化文件,重新生成......");
ModuleCollection modules = new ModuleCollection();
modules.Add(module);
modules.WriteXml(MyArx.MainPath + "\\NetAutoLoad.xml");
ed.WriteMessage("OK!");
}
else
{
ed.WriteMessage("OK!");
}
//检查加载项
ed.WriteMessage("\n\n检查注册表加载项......");
_modules.ReadXml(MyArx.MainPath + "\\NetAutoLoad.xml");
foreach (Module mod in _modules)
{
if (mod.Load)
{
if (!mod.SearchForReg())
{
ed.WriteMessage("\n{0}({1})未正确注册!......", mod.Name, mod.Description);
mod.RegApp();
ed.WriteMessage("OK!");
Assembly.LoadFrom(mod.Location);
}
else
{
ed.WriteMessage("\n{0}({1})已注册!", mod.Name, mod.Description);
}
}
}
ed.WriteMessage("\n");
}
public void Terminate()
{
}
#endregion
}
}
本帖最后由 作者 于 2009-8-27 23:16:55 编辑
命令: nal:c
++++++++++++++++++++++++++++++++++++
程序集名称:NetAutoLoad
路径:D:\TlsCad\Bin\NetAutoLoad.dll
说明:
.Net Assembly Manger For AutoCad
Writer:xsfhlzh
How to:
1.第一次运行时,命令行加载;
2.下次运行时程序将自动加载.
命令名:Nal:C,Nal:C
函数名:ShowCmds
命令名:Nal:M,Nal:M
函数名:Mange
命令名:Nal:U,Nal:U
函数名:UnReg
++++++++++++++++++++++++++++++++++++
程序集名称:TlsCad
路径:D:\TlsCad\Bin\TlsCad.dll
说明:
TlsCad 0.2 For AutoCad
Writer:xsfhlzh
命令名:CCicByDb,CCicByDb
函数名:CCicByDb
命令名:CCirByGe,CCirByGe
函数名:CCirByGe
命令名:CTest,CTest
函数名:test
命令名:ee,ee
函数名:RussiaSquareEnd
命令名:ht,ht
函数名:HatchLoop
命令名:lj,lj
函数名:DoIt
命令名:plj,plj
函数名:DoIt
命令名:ss,ss
函数名:RussiaSquareStart
命令名:t1,t1
函数名:Test1
命令名:t2,t2
函数名:Test2
命令名:t3,t3
函数名:Test3
命令名:t4,t4
函数名:Test4
命令名:t5,t5
函数名:Test5
命令名:t8,t8
函数名:Test8
命令名:t9,t9
函数名:Test9
命令名:Tls:BAC,Tls:BAC
函数名:BreakAllCurve
命令名:Tls:DP,Tls:DP
函数名:DisplayProperties
命令名:Tls:PI,Tls:PI
函数名:PartInsert
命令名:Tls:PP,Tls:PP
函数名:Test3
命令名:TT,TT
函数名:Test
本帖最后由 作者 于 2009-8-30 10:51:29 编辑
命令: nal:c
NetAutoLoad 已加载!
检查注册表......OK!
检查初始化文件......OK!
检查注册表加载项......
--------------------------------------
NetAutoLoad已注册!
"D:\TlsCad\Bin\NetAutoLoad.dll"
--------------------------------------
TlsAddressList已注册!
"D:\TlsCad\Bin\TlsAddressList.dll"
--------------------------------------
TlsBasal已注册!
"D:\TlsCad\Bin\TlsBasal.dll"
--------------------------------------
++++++++++++++++++++++++++++++++++++
程序集名称:NetAutoLoad
路径:D:\TlsCad\Bin\NetAutoLoad.dll
说明:
.Net Assembly Manger For AutoCad
Writer:xsfhlzh
How to:
1.第一次运行时,用NetLoad命令加载;
2.下次运行时程序将自动加载.
注意:
1.Ass是命令列表文件,包含程序说明和命令说明,可覆盖.
2.Assx文件是程序初始化文件,包含程序列表,不可覆盖.
3.添加程序集不要在Assx文件中手动加载,必要时可删除该文件.
****************************
命令名:Nal:C,Nal:C
模块名:NetAutoLoad.dll
类型名:TlsCad.NetAutoLoad.TlsMain
函数名:ShowCmds
说明:
命令行显示命令列表
****************************
命令名:Nal:M,Nal:M
模块名:NetAutoLoad.dll
类型名:TlsCad.NetAutoLoad.TlsMain
函数名:Mange
说明:
1.添加/删除程序集
2.设置程序集启动方式
3.为命令添加帮助
****************************
命令名:Nal:U,Nal:U
模块名:NetAutoLoad.dll
类型名:TlsCad.NetAutoLoad.TlsMain
函数名:UnReg
说明:
程序卸载
****************************
++++++++++++++++++++++++++++++++++++
程序集名称:TlsAddressList
路径:D:\TlsCad\Bin\TlsAddressList.dll
说明:
TlsAddressList For AutoCad
Writer:xsfhlzh
通讯录管理
****************************
命令名:tls:als,tls:als
模块名:TlsAddressList.dll
类型名:TlsAddressList.TlsMain
函数名:ShowAddressList
说明:
显示通讯录管理界面
****************************
++++++++++++++++++++++++++++++++++++
程序集名称:TlsBasal
路径:D:\TlsCad\Bin\TlsBasal.dll
说明:
TlsBasal For AutoCad
Writer:xsfhlzh
TlsCad基本类库
****************************
++++++++++++++++++++++++++++++++++++
<p>1.0正式版本,短时间内应该不会更新了:)</p> 收到顶起来。 <p>顶起来</p><p></p> 強大.
页:
[1]
2