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

原文:控件注册 - 利用资源文件将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#版。

时间: 2024-10-03 07:56:54

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

【转】ActiveX控件注册的几种方法

from:http://hi.baidu.com/estellejiang/blog/item/af16e862bbd1d3d7e6113aa7.html      ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件.由于ActiveX控件与开发平台无关,因此,在一种编程语言上开发的ActiveX控件可以无须作任何修改,即可在另一种编程语言中使用,其效果如同使用Windows通用控件一样.如:在VC++

ActiveX控件注册的几种方法

本文中的程序原为VC++所编写,略改动一些,将程序用C++Builder编写. ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件.由于ActiveX控件与开发平台无关,因此,在一种编程语言上开发的ActiveX控件可以无须作任何修改,即可在另一种编程语言中使用,其效果如同使用Windows通用控件一样.如:在VC++中开发的ActiveX控件,不作任何修改即可应用于VB中.由此可见,通过使用Activ

Silverlight控件注册验证机制探索

先给大家介绍一下Silverlight客户端控件的使用情景.一般来说, Silverlight客户端控件会销售给开发Silverlight程序的公司,他们是控件的购 买者.他们开发的程序中会用到Silverlight客户端控件.但是Silverlight控件 最终是在浏览Silverlight 程序的网站用户机器上执行的.说的有点绕,请参照 下图. 这个纯客户端注册验证机制主要流程如下: 1,控件购买者下载使用Silverlight控件(Silverlight控件中包含 PublicKey及验证

Excel条形码控件注册成功但不显示也无法使用怎么办

问题描述 Excel条形码控件注册成功但不显示也无法使用怎么办 WIN10 64位系统 Excel专业增强版2016 都激活过了 现在有一张别人的表 表的设定是填写后条形码根据填写内容变化 因此我需要安装MSBCODE.OCX控件 我就下载控件后注册了一下,像这样 在SysWOW下和System32下都这么注册也成功了 但是在Excel里面就找不到那个控件,当然也无法使用,像这样 我在同学电脑上注册完就能用,我们用一个系统盘装的系统,Excel件也是一样,我怀疑是Excel我改了些文件存放位置问

64位 atl 控件注册-64Bit atl control 控件注册问题

问题描述 64Bit atl control 控件注册问题 目前我编译了一个atl control控件,名字暂且命名为mydll.dll,mydll.dll32bit 版本运行正常,然后由于内存问题,现在需要编译64bit的,mydll.dll相关的一些库都已经编译成64bit了,然后 在 c://windows//system32 regsvr32 .../.../mydll.dll注册,系统提示注册成功,但是用vs2010新建winform程序,.dll可以引用(工程下手动添加),但是 to

用jnative调用关联授权文件的dll,加载授权文件失败!!

问题描述 用jnative调用关联授权文件的dll,加载授权文件失败是怎么一回事??授权文件是lic格式的,是不是路径的问题??用Eclipse开发的,是不是Eclipse不支持加载lic??代码如下:packagecom;importorg.xvolks.jnative.JNative;importorg.xvolks.jnative.Type;importorg.xvolks.jnative.exceptions.NativeException;importorg.xvolks.jnativ

java-于Java的servlet服务端项目如何打包成exe文件运行在服务器上。

问题描述 于Java的servlet服务端项目如何打包成exe文件运行在服务器上. 求大神帮忙啊,开发了一个手机app的客户端和服务器端,客户端可以打包成一个apk直接在手机上安装,请问服务器端的servlet可不可以也这样,具体怎么做 解决方案 直接把工程放在服务器webapp下面 解决方案二: 你先用一个tomcat吧项目部署好,tomcat内部文件夹放置好jre,然后修改startup.bat配置成直接访问这个jre,你的项目放到放到webapps上,调试通过: 然后下载一个exe打包工具

如何把Java项目打包成exe文件

问题描述 我在使用exe4j把Java项目打包成exe的时候,最后出现错误了,不能把oracle的驱动jar包加进去,不知道怎么弄了.在Java项目中,我已经把oracle的jar包放在项目中的lib下,并在项目中引用了,但是在转换的时候,驱动jar包总是不能添加到exe文件中,JRE环境的文件都能添加到里面 解决方案 解决方案二:你百度,,,我见过那种方法!解决方案三:不要exe了,用java或javaw调用jar里的入口类,将命令行写成批处理,win下用bat,linux下用.hexe文件无

怎么用c#写一个解压指定目录下所有的压缩文件,并且把压缩文件里面的内容放进指定文件夹呢?

问题描述 怎么用c#写一个解压指定目录下所有的压缩文件,并且把压缩文件里面的内容放进指定文件夹呢? 怎么用c#写一个解压指定目录下所有的压缩文件,并且把压缩文件里面的内容放进指定文件夹呢? 解决方案 http://www.cnblogs.com/zfanlong1314/p/4202695.html 解决方案二: csharp文件操作类 遍历 递归 着重这三点 解决方案三: 放进文件夹就是先创建一个和压缩文件同名的目录,然后作为解压目录. 解决方案四: 这个问题,可以分成几部分:1 遍历指定目录