控件注册 - 利用资源文件将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-14 00:54:38

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

ActiveX控件注册不起作用的解决办法

公司写了一个ActiveX打印插件.其中一个同事的电脑死活不能用.于是我就上网找办法 这位兄弟写的比较清晰. ActiveX交互时浏览器的设置以及ActiveX控件注册的检测 http://blog.csdn.net/stalwartwill/article/details/15504191 照着他的办法.我ActiveX控件的ProgId写错了.总是返回false. 我还以为没办法了.奇妙的事情来了.控件突然起作用了. 然后又不起作用了.... 经过测试后. 发现必须先运行那个测试文件.Act

第二十一篇:SOUI中的控件注册机制

Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符串中创建出需要的控件对象,和Win32类似,在SOUI中要创建一个新的控件也同样需要向SOUI系统注册新的控件类. 从demo.cpp的main中我们可以看到类似如下的控件注册控件的代码: //向SApplication系统中注册由外部扩展的控件及SkinObj类 SWkeLoader wkeLoa

CAD向控件注册一个命令(com接口VB语言)

主要用到函数说明: MxDrawXCustomFunction::Mx_RegistUserCustomCommand 向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令事件的id就是该注册时的id值,详细说明如下: 参数 说明 CString sCommandName 命令名称 LONG lId 命令id VB代码实现如下: 1 2 3 4 5 6 Set param2 = New MxDrawXLib.MxDrawResbuf param2.AddString

cocos2dx lua 项目如何打包成exe文件

对于一直想把cocos2d-x项目发给朋友看,但是又不会打包成exe,阅读完此文章就会实地操作cocos2dx lua 项目如何打包成exe文件. 不过在此之前要说明一点,最好做成release版本后再打包成exe,不然的话,别人的机器可能会提示缺少dll之类的,(release版本也一样,也可以像下列方法) 下面,你要打包cocos2d-x中的Test项目成一个exe文件 1:可以再cocos2d-x目录下的Debug.win32的全部复制到一个文件夹里 2:然后把Test所有的资源也复制到上

Python3.4 .py文件如何打包成.exe文件

一.安装pywin32 1.下载pywin32-218.win-amd64-py3.4.exe (根据操作系统的位数下载) 2.运行安装 3.如果安装提示如下错误: 打开注册表 "regedit" 1.从"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python"找到注册表,导出 2.编辑其内容,用"HKEY_CURRENT_USER\Software" 替换全部的 "HKEY_LOCAL_MACHI

java项目使用exe4j打包成exe文件

java项目使用exe4j打包成exe文件 前言:我们都知道java是平台无关性,可以打包成jar文件,到任何操作系统有jre环境的电脑都可以允许!但是我们打包成exe文件就相当于舍弃了这一大优势,不过确实有需要打包成exe的时候吧!下面介绍方法给大家,将java程序打包成exe可运行文件! 准备工具: eclipse.exe4j(exe4j的下载地址:http://www.pc6.com/softview/SoftView_68764.html#download  如安装遇到问题,请参见:ht

将 Python3 文件打包成 exe 文件

我们用 Python 写好的代码,如何给别人在没有配置 Python 环境的情况下直接使用呢?尤其是面向 windows 众. 因为 Python 是一门解释性的语言,离开了 Python 解释器,Python 无法执行.但是我们还有相应的解决方案,答案就是打包成 .exe 可执行文件 当然这篇正文前废话两句,一是看过之前网上的一些吐槽,因为没有学过编译原理,所以也不能不懂乱讲,姑且称之为半引用吧: Python 的哲学是所见即所得,脚本类语言也注定了其加密性不如其他编译生成的语言(比如C++,

Pyinstaller (python打包为exe文件)

需求分析: python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速. 当然打包的脚本似乎不是在所有的win平台下都能使用,win7有一部分不能使用,我在win10能够很好的运行. 准备: pyinstaller (http://www.pyinstaller.org) 首先还是去官网看支持的python版本,不然会很尴尬的. 安装: 需要安装pyinstaller和pywin32 使用以下命令将会自动安装两个包,在cmd用

Pyton项目打包成exe文件

Python项目打包成exe文件 1 系统环境 windows版本: Win7 64位 python环境:Anaconda python版本:3.6 64位 pyinstaller版本:3.5 1 安装pyinstaller库 Pyintaller打包时,会将解释器中所有的包默认一起打包,结果打包出的exe文件非常大.所以,建议使用Anaconda的虚拟环境来安装程序需要的包,然后在该虚拟环境中进行打包. 打开,Anaconda Prompt,切换到新建的虚拟环境安装pyinstaller和程序