首页 新闻 会员 周边

C#程序如何实现COM组件的自动注册呢

0
悬赏园豆:50 [已解决问题] 解决于 2010-01-05 15:17

请教,我在.net客户端程序里引用了C++的com组件,然后部署时如何实现为com组件的自动注册呢.
手动输入和运行批处理程序都不合适.

shanechow的主页 shanechow | 初学一级 | 园豆:185
提问于:2010-01-04 15:11
< >
分享
最佳答案
0

在程序开始执行下面函数,

strcmd="regsvr32 -s com组件";

 

static string RunCmd(string strCmd)
        {
            string rInfo;
            try
            {
                Process myProcess = new Process();
                ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("cmd.exe");
                myProcessStartInfo.UseShellExecute = false;
                myProcessStartInfo.CreateNoWindow = true;
                myProcessStartInfo.RedirectStandardOutput = true;
                myProcess.StartInfo = myProcessStartInfo;
                myProcessStartInfo.Arguments = "/c " + strCmd;
                myProcess.Start();
                StreamReader myStreamReader = myProcess.StandardOutput;
                rInfo = myStreamReader.ReadToEnd();
                myProcess.Close();
                rInfo = strCmd + "\r\n" + rInfo;
                return rInfo;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

收获园豆:50
一滴血 | 小虾三级 |园豆:1602 | 2010-01-04 17:01
非常感谢您的热心回答,我试验了下发现还是无法注册,strcmd="regsvr32 -s com组件"这个命令似乎不起作用,我改成了strcmd="regsvr32.exe "+AppDomain.CurrentDomain.BaseDirectory+"com组件.dll";但是会提示错误RegSvr32 LoadLibrary("C:\Documents")失败- 找不到指定的模块
shanechow | 园豆:185 (初学一级) | 2010-01-05 09:25
@shanechow:com组件:是绝对路径... ..你可以去掉"-s",你就可以看到是否注册成功.
一滴血 | 园豆:1602 (小虾三级) | 2010-01-05 09:55
@shanechow:注意空隔
一滴血 | 园豆:1602 (小虾三级) | 2010-01-05 09:58
我又改了下可以成功了,原来是绝对路径里有空格,就不能正确注册,我把应用程序安装到其他目录就可以正常注册了.但问题又来了我应用程序运用的是cickonce安装,默认都会安装到C:\Documents and Settings下.
shanechow | 园豆:185 (初学一级) | 2010-01-05 10:20
谢谢,已经解决了,使用不具备扩展名的路径值
shanechow | 园豆:185 (初学一级) | 2010-01-05 10:35

@shanechow: 不具备扩展名的路径值?不明白,能解释一下吗?"

米粥煮熊猫 | 园豆:157 (初学一级) | 2013-12-05 10:33

这个可以解决下面的问题吗
错误 24 “ResolveManifestFiles”任务意外失败。
System.ArgumentException: 路径中具有非法字符。
在 System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath)
在 System.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, String fullPath, Boolean checkForDuplicates, Boolean needFullPath)
在 Microsoft.Build.Tasks.Deployment.ManifestUtilities.Util.RemoveDuplicateItems(ITaskItem[] items)
在 Microsoft.Build.Tasks.Deployment.ManifestUtilities.Util.SortItems(ITaskItem[] items)
在 Microsoft.Build.Tasks.ResolveManifestFiles.set_NativeAssemblies(ITaskItem[] value) ArcGIS-3DLoad
错误 25 “ResolveManifestFiles”任务的“NativeAssemblies=@(NativeReferenceFile);@(_DeploymentNativePrerequisite)”参数无效。 ArcGIS-3DLoad
错误 26 未能使用“ResolveManifestFiles”任务的输入参数初始化该任务。 ArcGIS-3DLoad

涵冰 | 园豆:200 (初学一级) | 2020-11-06 11:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册