33

最初にocxをregsrv32に登録せずに、winformでocx(ActiveXコントロール)を使用することは可能ですか(おそらくプログラムで追加します)?

私が達成しようとしているのは、xcopy インストールを有効にすることです。「AxInterop..dll 」および「 Interop..dll 」ファイルを開発マシンから生成しました。

ocxもCOMベースであるため、最初に登録せずにCOM dllを呼び出す可能性を見てきました(ProSysLib、著者によると、まだテストしていません)。それもやってください。

4

6 に答える 6

35

はい、これは可能です。アプリケーションが Windows XP (または Windows Server 2003) 以降にのみ展開されると想定する必要があります。そうすれば、「登録不要の COM」と呼ばれるものを使用してこれを実現できます。

基本的に、ActiveX コントロール DLL のマニフェスト ファイルを作成して、Windows ローダーと COM DLL がレジストリに登録しなくてもその登録内容を認識できるようにします。

何をすべきかのチュートリアルは、MSDN のこの記事に あります: COM コンポーネントの登録不要のアクティブ化: ウォークスルー

その記事の「ステップ 6」と「ステップ 7」には、必要なものがすべて含まれています。

Microsoft ActiveX グリッド コントロール (古い「MS Flex Grid」) を使用する自分の C# プログラムの 1 つでこれを試してみたところ、問題なく動作しました。アプリケーションと COM DLL の両方のマニフェスト ファイルを作成し、適切な場所を適切な GUID に置き換えてください。OLEVIEW を使用して、使用する適切な ID を ActiveX DLL から掘り出す必要がある場合があります。

于 2008-10-24T19:52:34.623 に答える
5

.NET で作成された COM コンポーネントにレジストリを使用しない COM を使用すると、Windows XP でクラッシュがランダムに発生する可能性があることに注意してください。

リンク:これを学んだStackoverflow の質問、その質問で参照されているマイクロソフトのナレッジベースの記事。ホットフィックスがありますが、再配布は許可されていません。

于 2009-03-17T21:55:08.773 に答える
3

Visual Studio ではさらに簡単です。[参照] に移動し、ocx によって作成された位置 (AxSomething と Something の 2 つがあるはずです) を見つけて、それらの両方のプロパティに Isolated: true を設定します。マニフェストもコードもありません。ocx を含む dll ファイルと共に exe を配布する必要があります。開発マシンでは、ocx を登録できます。

于 2012-03-20T11:23:31.147 に答える
0

Win7でOCXを使用してVB6アプリを実行する方法と管理者権限を登録せずに10時間検索した後、ここでいくつかのクリックソリューションを見つけました:http://mmm4vb6.atom5.com/yes-update-0-12-5479.html# c

Embed Manifest を確認して機能させる必要があります。魅力として働きます!

この質問もここで見つけたので、ここに解決策を投稿します。

于 2013-04-11T19:58:49.743 に答える