控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

简介: 原文: 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)       很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个exe,点击直接运行呢?就像很多安全控件,如支付宝的aliedit.exe那样。
原文: 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

      很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个exe,点击直接运行呢?就像很多安全控件,如支付宝的aliedit.exe那样。

 

      现在介绍一种使用资源文件,将dll、ocx打包进exe,点击直接注册的例子:

      首先,新建一个工程RegisterFile。  新建文件夹Resource,里面添加需要注册的ocx或dll。这里我添加的是dsoframer.ocx,并将其文件“属性”中“生成操作”项的值改为“嵌入的资源”。

      

      接下来,创建类Register.cs   里面只有一个函数RegisterDll()。 这里为省事,我把它放到了Program.cs里,同一命名空间下,效果是一样的。    

      using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Diagnostics; namespace RegisterFile { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmMain()); } } class Register { public void RegisterDll(string strDll) { Process p = new Process(); p.StartInfo.FileName = "Regsvr32.exe"; p.StartInfo.Arguments = " " + strDll; p.Start(); p.Close(); } } }

     

      最后,在Form1_Load()中添加代码:  

      //需要添加引用 //using System.IO; //using System.Reflection; //using System.Resources; private void Form1_Load(object sender, EventArgs e) { this.Visible = false; string strPath = string.Empty; strPath = System.Environment.CurrentDirectory; Assembly asm = Assembly.GetEntryAssembly(); using (Stream stream = asm.GetManifestResourceStream("RegisterFile.Resource.dsoframer.ocx")) { int len = (int)stream.Length; byte[] byts = new byte[len]; stream.Read(byts, 0, len); stream.Close(); using (FileStream fs = new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.System) + "//dsoframer.ocx", FileMode.Create)) { fs.Write(byts, 0, len); } } Register r = new Register(); r.RegisterDll("dsoframer.ocx"); this.Close(); }

 

 

     注意:Stream stream = asm.GetManifestResourceStream("RegisterFile.Resource.dsoframer.ocx")中"RegisterFile.Resource.dsoframer.ocx"的取值为“命名空间”+ “文件夹” + “文件名称”。

 

 

还有注册控件VB版。其实VB版才是先写的,后来才做的C#版。

目录
相关文章
|
1月前
|
C#
C# 解决引用dll,出现dll不可以使用等问题
C# 解决引用dll,出现dll不可以使用等问题
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
1月前
|
C#
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
42 0
|
19天前
|
C#
【C#】C#读写Excel文件
【C#】C#读写Excel文件
21 1
|
21天前
|
JavaScript 前端开发 C#
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
21 0
|
1月前
|
SQL 存储 Oracle
C# Web控件与数据感应之 Control 类
C# Web控件与数据感应之 Control 类
|
1月前
|
SQL 存储 C#
C# Web控件与数据感应之 TreeView 类
C# Web控件与数据感应之 TreeView 类
|
1月前
|
SQL 存储 Oracle
C# Web控件与数据感应之 CheckBoxList 类
C# Web控件与数据感应之 CheckBoxList 类
|
1月前
|
SQL 存储 Oracle
C# Web控件与数据感应之 ListControl 类
C# Web控件与数据感应之 ListControl 类