首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程注册ocx文件

远程注册ocx文件
EN

Stack Overflow用户
提问于 2012-07-25 05:22:45
回答 4查看 2.3K关注 0票数 0

我有一些想要注册的VB6 .ocx文件。这些.ocx文件将位于远程计算机上。

以编程方式注册这些.ocx文件的最佳方式是什么?

代码语言:javascript
复制
string arg_fileinfo = "/s" + " " + "\"" + "\\<remotemachine>\\<directory>\\<ocx>" + "\"";
Process reg = new Process();
//This file registers .dll files as command components in the registry.
reg.StartInfo.FileName = "regsvr32.exe";
reg.StartInfo.Arguments = arg_fileinfo;
reg.StartInfo.UseShellExecute = false;
reg.StartInfo.CreateNoWindow = true;
reg.StartInfo.RedirectStandardOutput = true;
reg.Start();
reg.WaitForExit();
reg.Close();

我没有收到任何错误,但它也没有注册.ocx。有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-26 00:54:57

把这当做你可以忽略的警告(因为我知道你无论如何都会忽略):

这样做不是一个好的做法。从“从网络运行”开始,PE文件(EXE、DLL、OCX)需要专门链接,否则会有高网络活跃度和因间歇性网络中断而崩溃的风险。而且,注册任何不在引导驱动器上或至少不在本地硬盘驱动器上的内容都是不明智的。这样做在“糟糕的实践”列表中名列前茅,即使它似乎在大部分时间内都是有效的。

为什么不遵循公认的实践进行正常部署呢?

我的猜测是,您正在进行大量的Mort开发,拼凑了一个又一个版本的程序,希望其中一个最终能“坚持下去”。所以你想把它的部分或全部转储到网络共享上,想着“安装?安装?我们不需要安装。我只需要把新文件上传到那里,就可以让所有的东西都不费力地神奇地工作。”

我假设您没有可用于通过组策略推送更新的托管网络,并且您没有创建必要的MSI安装程序包来处理产品和其中的升级代码。

一种替代方案是使用reg-free COM,它将为您解决许多小问题。

现在,您可以这样做,但仍然可以忽略从网络共享运行的PE文件的危险,或者您可以使用一个小的启动程序绕过它。该启动器可以检查网络共享中的新版本,如果找到,则在启动实际应用程序并终止之前将较新的文件复制到本地PC。这基本上是一种自动更新的XCopy部署技术。

你可以根据需要变得更花哨。例如,如果您的应用程序接受命令行参数,它可能会自己执行新版本检查,如果找到,则启动小型更新程序(向其传递命令行参数),然后终止。更新应用程序可以重新启动,并将这些参数传递给新版本。

但是,作为Mort (甚至是正式的工资单开发人员)的生活可能是一件痛苦的事情。即使您在托管的公司局域网环境中工作,也很难引起friendly neighborhood box jockeys的注意来正确处理事情。如果你的应用程序不是highly engineered批准的主要项目的一部分,那么这个数字就会加倍。

票数 0
EN

Stack Overflow用户

发布于 2012-07-26 00:15:14

如果要注册要在本地计算机上使用的远程文件,则在UNC路径上注册文件不需要任何特殊要求,但需要确保UNC路径或映射驱动器仍然可供所有用户使用,尤其是运行regsvr32的用户。据推测,这将是本地管理员(默认情况下在Windows Vista+上)将需要提升,这可能会断开网络连接。

还要注意,您的示例缺少UNC路径开头的额外\。您的代码将导致包含/s "\<remotemachine>\<directory>\<ocx>"arg_fileinfo

你可以添加额外的\,或者使用@装饰器,这使得在输入Windows路径时更加清晰:

代码语言:javascript
复制
string arg_fileinfo = "/s \"" + @"\\<remotemachine>\<directory>\<ocx>" + "\"";

或者仅将其用于整个字符串和可选的引号转义方法:

代码语言:javascript
复制
string arg_fileinfo = @"/s ""\\<remotemachine>\<directory>\<ocx>""";
票数 1
EN

Stack Overflow用户

发布于 2012-07-25 05:47:07

几年前我不得不这么做。据我所知,UNC名称不起作用,需要一个映射的驱动器号。无论它是严格意义上的regsvr32问题,还是由其他原因(例如Windows95)引起的,都迷失在时间的迷雾中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11639506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档