我如何注册用C#编写与Regsvr32的一个COM DLL?我如何注册用C#编写与Regsvr32的

2019-05-12 04:30发布

我有一个使用COM DLL一个VB6应用程序。 该DLL是用C#。 在C#项目属性我有“注册为COM互操作”选项选中。 在VB6应用程序工作正常,我的机器上。 C#代码遵循以下格式完全相同: CodeProject上C#COM实施例

当部署到其他机器,Regsvr32.exe的给我下面的错误,当我尝试注册DLL:

The module "MyCOM.dll" was loaded but the entry-point DLLRegisterServer was not found.

这是什么意思? 没有教程/文档,我读过有关COM DLL中说的“入口点的DLLRegisterServer”任何东西。

我们有不同的机器上使用RegAsm.exe大问题,所以我们真的需要一个解决方案,我们可以regsvr32.exe的运行而不是会为我们部署(即XP,Vista中,Windows 7,86机,64机的任何工作机等)

什么我需要添加到我的C#代码,使其注册,能够与regsvr32.exe的?

Answer 1:

你不能。 管理[标记有ComVisible特性]类库需要与Regasm.exe注册。

您可以从项目+属性的IDE做到这一点,建立标签,注册COM互操作复选框。 如果您运行Regasm.exe通常希望/基本代码命令行选项,这样你就不必把大会在GAC。 另一个选择是让Regasm.exe生成与/ REGFILE选项.reg文件。 你只运行在目标机器上得到更新注册表。

编辑:刚才看到的“重大问题”的话。 注意确保它们是什么,从/代码库短。 你必须挑上64位机器正确的版本。 那里有两个。 而你需要提升的命令提示符中,UAC不制止它。



Answer 2:

你可以做一个简单的Windows应用程序和使用下面的代码来注册COM DLL。 确保添加清单文件以管理员身份运行:

...

namespace comregister
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string framework = Environment.GetEnvironmentVariable("SystemRoot") + @"\Microsoft.NET\Framework\v2.0.50727\";

        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
                button2.Enabled = true;
                button3.Enabled = true;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            FileInfo fi = new FileInfo(textBox1.Text);
            string fn = fi.FullName.Substring(0, fi.FullName.Length - 4);
            string dll = "\"" + fi.FullName + "\"";
            string tlb = "\"" + fn + ".tlb\"";

            Process p = new Process();
            p.StartInfo.FileName = framework + "regasm.exe";
            p.StartInfo.Arguments = dll + " /tlb:" + tlb + " /codebase";
            p.Start();
            p.WaitForExit();
            label2.Text = "registered";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            FileInfo fi = new FileInfo(textBox1.Text);
            string dll = "\"" + fi.FullName + "\"";

            Process p = new Process();
            p.StartInfo.FileName = framework + "regasm.exe";
            p.StartInfo.Arguments = dll + " /unregister";
            p.Start();
            p.WaitForExit();
            label2.Text = "unregistered";
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}


文章来源: How do I register a COM DLL written in C# with Regsvr32?