Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 远程注册ocx文件_C#_Vb6_Ocx - Fatal编程技术网

C# 远程注册ocx文件

C# 远程注册ocx文件,c#,vb6,ocx,C#,Vb6,Ocx,我有一些VB6.ocx文件要注册。这些.ocx文件将位于远程计算机上 以编程方式注册这些.ocx文件的最佳方式是什么 string arg_fileinfo = "/s" + " " + "\"" + "\\<remotemachine>\\<directory>\\<ocx>" + "\""; Process reg = new Process(); //This file registers .dll files as command components

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

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

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();
string arg\u fileinfo=“/s”+“+”+“+”\“+”\“+”\”;
Process reg=新流程();
//此文件将.dll文件注册为注册表中的命令组件。
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();
注册关闭();

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

几年前我不得不这么做。据我记忆所及,UNC名称不起作用,需要映射驱动器号。无论是严格意义上的regsvr32问题,还是由其他问题(如Windows 95)引起的问题,都会在时间迷雾中丢失。

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

还要注意,您的示例缺少UNC路径开头的额外
\
。您的代码将导致
arg\u fileinfo
包含
/s“\\\”

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

string arg_fileinfo = "/s \"" + @"\\<remotemachine>\<directory>\<ocx>" + "\"";
string arg\u fileinfo=“/s\”“+@”\\\\\“+”;
或者只对整个字符串和可选的引号转义方法使用它:

string arg_fileinfo = @"/s ""\\<remotemachine>\<directory>\<ocx>""";
string arg\u fileinfo=@/s“\\\”;

将此视为您可以忽略的警告(因为我知道您无论如何都会忽略):

这样做不是一个好的做法。仅从“从网络运行”开始,PE文件(EXE、DLL、OCX)需要为此进行专门链接,否则可能会因间歇性网络中断而导致高网络活动和崩溃。而且,注册任何不在启动驱动器或至少本地硬盘驱动器上的东西都是不明智的。做这些事情在“不良行为”列表中排名靠前,尽管它似乎在大多数情况下都有效

为什么不按照公认的做法进行正常部署

我的猜测是,你正在做大量的开发工作,把一个版本又一个版本的程序放在一起,希望其中一个最终会“粘住”。所以你想把它的一部分或全部转储到网络共享上“安装?安装?我们不需要安装steenking。我可以把新文件放在那里,让一切都不费吹灰之力就能神奇地工作。”

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

另一种选择是使用免费注册的COM,这将为您解决许多小问题

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

你可以随心所欲。例如,如果你的应用程序接受命令行参数,它可能会自行检查新版本,如果找到,则启动小型更新程序(将命令行参数传递给它),然后终止。更新程序应用程序可以重新启动并将这些参数传递给新版本


但是是的,作为Mort(甚至是工资单开发者的官员)的生活这可能是一件痛苦的事情。即使您在受管理的公司局域网环境中工作,也很难让您的客户注意到如何正确地完成工作。如果您的应用程序不是某个受批准的重大项目的一部分,这将加倍。

如果您想注册文件以便在远程计算机上使用,您需要在其上运行代码那台远程机器。

您可以坐在计算机前,使用远程控制软件或类似的远程管理工具来执行此操作。

您想在本地计算机上注册远程文件,还是在远程计算机上注册远程文件?哎哟,哎哟。下面是“DLL地狱”。“不要这样做。许多库是共享的,还有其他需要注册表更新的内容,如使用计数和其他卸载信息,您需要检查它们是否已经存在、版本等。您可能会破坏用户的其他应用程序。使用适当的部署包。“这些是私人OCX”是个糟糕的借口。@BobRiemersma-这只是过程中的一步。我将通过一个“新的”.ocx文件进行复制,而这正是我要重新注册的文件。@Deanna-我想从我的本地计算机注册远程计算机上的.ocx文件。@JeffV:为什么要将它复制到远程计算机上?我会将我的评论升级为答案。我会看到一个消息框,说明ocx已经注册(我取出了/s),但是,当我在远程机器上尝试时,ocx仍然没有注册。你说的“当我在远程机器上尝试时”是什么意思?您只在本地计算机上注册了它(但托管在远程计算机上),这就是为什么我澄清了您的目的。谢谢Bob,我感谢您的见解。我试着在编码时遵循“不要伤害”的咒语。我试图构建一个实用程序,以帮助开发人员在将.ocx文件移动到开发人员机器上进行测试时提高工作效率。我会采纳你的建议,谨慎行事。