0

登録したい 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 も登録されていません。何か案は?

4

4 に答える 4

1

ローカル マシンで使用するためにリモート ファイルを登録する場合、UNC パスにファイルを登録するために特別なことは必要ありませんが、UNC パスまたはマップされたドライブが引き続きすべてのユーザーに利用可能であることを確認する必要があります。特に実行しているユーザーregsvr32。おそらく、これはネットワーク接続を切断できる昇格を必要とする (Windows Vista 以降のデフォルトで) ローカル管理者になります。

\また、あなたの例には、UNC パスの先頭から余分なものがないことに注意してください。あなたのコードarg_fileinfo/s "\<remotemachine>\<directory>\<ocx>".
エクストラを追加するか、デコレータを\使用して、 Windows パスを入力するときにわかりやすくすることができます。@

string arg_fileinfo = "/s \"" + @"\\<remotemachine>\<directory>\<ocx>" + "\"";

または、文字列全体と別の引用符エスケープ メソッドに使用します。

string arg_fileinfo = @"/s ""\\<remotemachine>\<directory>\<ocx>""";
于 2012-07-25T16:15:13.697 に答える
0

これは、無視しても構わない警告だと思ってください (とにかくそうすることがわかっているからです):

これを行うのは良い習慣ではありません。「ネットワークから実行」することから始めるには、PE ファイル (EXE、DLL、OCX) を特別にリンクする必要があります。そうしないと、断続的なネットワークの中断により、ネットワーク アクティビティが高くなり、クラッシュする危険があります。また、ブート ドライブまたは少なくともローカル ハード ドライブにないものを登録することは、賢明ではありません。ほとんどの場合うまくいくように見えるかもしれませんが、このいずれかを行うことは「悪い習慣」リストの上位にランクされます。

受け入れられているプラ​​クティスに従って、通常の展開を行うだけではどうですか?

私の推測では、あなたは多くのMort開発を行っており、そのうちの 1 つが最終的に「固執」することを期待して、いくつかのプログラムのバージョンごとにバージョンをまとめています。そのため、「インストール? インストール? 悪質なインストールは必要ありません。そこに新しいファイルを配置するだけで、何の努力もせずに魔法のようにすべてを動作させることができる」と考えて、その一部またはすべてをネットワーク共有にダンプしたいと考えます。

グループ ポリシーを介して更新プログラムをプッシュするために使用できる管理されたネットワークの余裕がなく、製品コードとアップグレード コードを処理するために必要な MSI インストーラー パッケージを作成していないと仮定します。

代替案の 1 つは、reg-free COM を使用することです。これにより、多くの小さな問題が解決されます。

これを実行しても、ネットワーク共有から実行される PE ファイルの危険性を無視するか、小さなランチャー プログラムを使用して回避することができます。そのランチャーは、新しいバージョンのネットワーク共有をチェックし、見つかった場合は、実際のアプリケーションを開始して終了する前に、新しいファイルをローカル PC にコピーできます。これは基本的に、自動更新された XCopy 展開手法です。

必要に応じて派手にすることができます。たとえば、アプリケーションがコマンド ライン パラメーターを受け入れる場合、新しいバージョン チェック自体を実行し、見つかった場合は小さなアップデーターを開始し (コマンド ライン パラメーターを渡す)、終了します。アップデーター アプリが再起動し、それらのパラメーターを新しいバージョンに渡すことができます。

しかし、そうです、モートとしての生活 (または公式の有給開発者でさえも) は苦痛になる可能性があります。管理された企業 LAN 環境で作業している場合でも、友好的な近所のボックス ジョッキーの注目を集めて適切に処理することは非常に困難です。あなたのアプリケーションが高度に設計された認可された主要プロジェクトの一部でない場合、それは 2 倍になります。

于 2012-07-25T16:54:57.337 に答える
0

私は数年前にこれをしなければなりませんでした。私が覚えている限りでは、UNC 名は機能せず、マップされたドライブ文字が必要でした。それが厳密に regsvr32 の問題だったのか、それとも別の何か (Windows 95 など) が原因だったのかは、時の霧の中で失われます。

于 2012-07-24T21:47:06.717 に答える
0

リモート マシンで使用するためにファイルを登録する場合は、そのリモート マシンでコードを実行する必要があります。
これは、物理的にコンピュータの前に座ってリモート コントロール ソフトウェアを使用するか、psexec.exeなどのリモート管理ツールを使用して行うことができます。

于 2012-07-26T08:27:54.633 に答える