我有一些我想注册的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();
我没有收到任何错误,但它也没有注册.ocx。有什么想法吗?
答案 0 :(得分:1)
如果要注册远程文件以在本地计算机上使用,则在UNC路径上注册文件没有什么特别要求,但您确实需要确保UNC路径或映射驱动器仍可用于所有用户,尤其是正在运行regsvr32
的用户。据推测,这将是本地管理员(默认情况下在Windows Vista +上)将需要提升,这可能会断开网络连接。
另请注意,您的示例缺少UNC路径开头的额外\
。您的代码将生成包含arg_fileinfo
的{{1}}
您可以添加额外的/s "\<remotemachine>\<directory>\<ocx>"
,或使用\
装饰器,这使得在进入Windows路径时更加清晰:
@
或者只是将它用于整个字符串和替代引用转义方法:
string arg_fileinfo = "/s \"" + @"\\<remotemachine>\<directory>\<ocx>" + "\"";
答案 1 :(得分:0)
答案 2 :(得分:0)
将此视为警告,您可以自由忽略(因为我知道您无论如何):
这样做不是一个好习惯。只是从“从网络运行”开始,PE文件(EXE,DLL,OCX)需要专门为其链接,否则由于间歇性网络中断而导致高网络活动和崩溃的风险。 注册任何不在启动驱动器或至少是本地硬盘驱动器上的东西都是不合理的。在“糟糕的做法”列表中做任何这一点都很高,尽管它似乎在大多数情况下都可以工作。
为什么不按照公认的做法进行正常部署?
我的猜测是你正在做很多Mort开发,在一些程序的版本之后将版本扔在一起,希望其中一个最终“坚持”。所以你想把部分或全部转储到网络共享上,想“安装?安装?我们不需要安装steenking 。我可以把新文件放到那里,让所有东西神奇地工作不费吹灰之力。“
我假设您没有可用于通过组策略推送更新的托管网络,并且您没有创建处理其中的产品和升级代码的必要MSI安装程序包。
一种替代方案是使用免注册COM,这将为您解决许多小问题。
现在,您可以执行此操作并仍然忽略从网络共享运行的PE文件的危险,或者您可以使用小型启动程序绕过它。该启动程序可以检查新版本的网络共享,如果找到,则在开始实际应用程序并终止之前将较新的文件复制到本地PC。这基本上是一种自动更新的XCopy部署技术。
你可以根据需要获得幻想。例如,如果您的应用程序接受命令行参数,它可能会执行新版本检查,如果找到,则启动小更新程序(将命令行参数传递给它),然后终止。更新程序应用程序可以重新启动并将这些参数传递给新版本。
但是,作为Mort(或者甚至是正式的工资开发者)的生活可能会很痛苦。即使您在托管企业局域网环境中工作,也很难引起friendly neighborhood box jockeys正确处理事情的注意力。如果您的申请不属于某些highly engineered批准的重大项目,则会增加一倍。
答案 3 :(得分:0)
如果要注册文件以便在远程计算机上使用,则需要在该远程计算机上运行该代码。
您可以通过物理坐在电脑前,使用远程控制软件或psexec.exe等远程管理工具来完成此操作。