C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: COMの登録(Component Object Model)


(過去ログ 139 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■81826 / inTopicNo.1)  COMの登録(Component Object Model)
  
□投稿者/ jinjin (1回)-(2016/11/16(Wed) 17:05:17)

分類:[.NET 全般] 

C# .Net4.0 で作成したCOM(DLL)を、ターゲット マシンにインストールするにはどうしたらよいのでしょうか?

regasm.exe "COMのDLLファイル名"
で、登録(レジストリ作成?)はできて、アプリケーションから使うことはできています。

しかし、ユーザーさんに"管理者プロンプトで、regasmで〜"とは言いづらい。
お勧めの方法とかあれば、お願いします。


★当方の開発について

VB6で作られている古いアプリケーションから、C#(.NET4)で自作したライブラリを呼び出したい。
方法として”COM”を使う方法しか見つけられなかった。
VB6のアプリケーションは、
Microsoft Development Environment 6.0 Visual Inter Dev 6.0
を使って、インストーラ(msiファイル)を作っています。


引用返信 編集キー/
■81827 / inTopicNo.2)  Re[1]: COMの登録(Component Object Model)
□投稿者/ shu (936回)-(2016/11/16(Wed) 17:17:13)
No81826 (jinjin さん) に返信

> regasm.exe "COMのDLLファイル名"
> で、登録(レジストリ作成?)はできて、アプリケーションから使うことはできています。
>
> しかし、ユーザーさんに"管理者プロンプトで、regasmで〜"とは言いづらい。
> お勧めの方法とかあれば、お願いします。
>
regasmを実行するバッチファイルを作ってそれを実行してもらうのはどうでしょう?


> VB6で作られている古いアプリケーションから、C#(.NET4)で自作したライブラリを呼び出したい。
> 方法として”COM”を使う方法しか見つけられなかった。
古いアプリをいじっているなら思い切って.Net用に作り直してしまうのも今後のメンテナンスを
考えたらよいかもしれません。C#で作成したアプリでの実行結果をVB6アプリで拾うようなことを
していなければC#側をexeにして別プロセスとして起動してしまうのもありかも?

引用返信 編集キー/
■81829 / inTopicNo.3)  Re[1]: COMの登録(Component Object Model)
□投稿者/ 魔界の仮面弁士 (952回)-(2016/11/16(Wed) 17:31:46)
No81826 (jinjin さん) に返信
> しかし、ユーザーさんに"管理者プロンプトで、regasmで〜"とは言いづらい。

ですね。それに、そもそも regasm は再頒布できなかったはず。

既に入っている環境であれば、バッチ起動で登録させることは可能ですが、
ユーザー環境に SDK や Visual Studio が入っていることを期待するわけにも行きませんし。

regasm の出番は、開発側でタイプライブラリを生成するところまでかな…。


> Microsoft Development Environment 6.0 Visual Inter Dev 6.0

InterDev を使っているというよりは、InterDev のインターフェイス上で動作する
「Visual Studio Installer 1.1」(あるいは 1.0)を使っているものと理解しました。


.NET アプリの配布に Visual Studio Installer 1.1 を使うのが
適切なのかどうかは疑問が残りますが、とりあえずそのインストーラーに、
レジストリの登録設定を施しておけば動作するかと思います。

https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/31c11e7a-e8c7-4ef5-9aef-6c39296ca551/vs2010-com?forum=vsgeneralja
http://pao-jp.sblo.jp/article/53358970.html
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16400&forum=7


WiX の場合は、こんな投稿がありました。
http://www.freeml.com/msi/3020/latest
引用返信 編集キー/
■81831 / inTopicNo.4)  Re[2]: COMの登録(Component Object Model)
□投稿者/ jinjin (2回)-(2016/11/16(Wed) 17:50:46)
No81827 (shu さん) に返信

shuさん

返信ありがとう御座います。

> regasmを実行するバッチファイルを作ってそれを実行してもらうのはどうでしょう?
バッチ ファイルは現在検討中ですが。。。
1.管理者コマンド プロンプト
2.regasm.exeの場所の特定
3."Program Files (x86)"下のAPフォルダへの侵入

と、高い關門が。。。
最初のユーザーさんのPCはWin10(32か64かは不明)。


> 古いアプリをいじっているなら思い切って.Net用に作り直してしまうのも今後のメンテナンスを
> 考えたらよいかもしれません。C#で作成したアプリでの実行結果をVB6アプリで拾うようなことを
> していなければC#側をexeにして別プロセスとして起動してしまうのもありかも?
VBのコード量がかなり大きい。
その昔、VB6 ->VB.NET 自動変換で、古いAPを.NET化してひどい目にあったので、
極力やりたくない(というか、コスト的に無理)。

C#側exe+ なんとかPipeLineというのは、少し検討しましたけど。。。
って感じです。


引用返信 編集キー/
■81833 / inTopicNo.5)  Re[2]: COMの登録(Component Object Model)
□投稿者/ jinjin (3回)-(2016/11/16(Wed) 18:33:15)
No81829 (魔界の仮面弁士 さん) に返信

魔界さん
返信ありがとうございます。

> ですね。それに、そもそも regasm は再頒布できなかったはず。
先程、事務の方のPC(Win10 7からの無償アップ)に入っていました"RegAsm.exe"。
C:Windows\Microsoft〜〜〜 の.NET4 的なフォルダの下にいました。
SDKとか入れなくても、入っているのかもしれません。


>
>>Microsoft Development Environment 6.0 Visual Inter Dev 6.0
>
> InterDev を使っているというよりは、InterDev のインターフェイス上で動作する
> 「Visual Studio Installer 1.1」(あるいは 1.0)を使っているものと理解しました。
Visual Studioの6なのかな?
ヘルプ - バージョン でみると

Microsoft Development Environment 6.0
で、セットアップさrている製品
Visual Inter Dev 6.0

となっています。
VB6のプロジェクト ファイルを指定しておくと、
〜.msi まで出力してくれます。

> レジストリの登録設定を施しておけば動作するかと思います。

これ(Microsoft Development Environment 6.0)に、
インストール時のレジストリ操作機能がある。
調べてみます。
COMに関するレジストリの仕組みとか理解していないけど、
レジストリ キー(?)のGuidの意味が分かれば、
なんとかなりそうな気がします。




引用返信 編集キー/
■81841 / inTopicNo.6)  Re[3]: COMの登録(Component Object Model)
□投稿者/ とっちゃん (406回)-(2016/11/17(Thu) 10:50:44)
No81833 (jinjin さん) に返信

> Microsoft Development Environment 6.0
> で、セットアップさrている製品
> Visual Inter Dev 6.0
>
> となっています。
> VB6のプロジェクト ファイルを指定しておくと、
> 〜.msi まで出力してくれます。

現在のVisual Studio にもこれの進化形ともいえる機能があります。
Community または、Pro以上じゃないと使えませんが。。。

こちらを使えば、C#のCOMサーバーも簡単に登録できます。
ファイル参照レベルでも自動で登録するようにしてくれるはずです。

これ以外だと、InstallShield も対応しています。
LimitedEdition という機能限定版なら VS 2010 およびそれ以降の
VSのPro以上 で利用できます(Communityには入ってないかもしれません)。

また、有償になってしまいますが、Express/Pro などのエディションでも
対応しています。
こちらだともしかしたらVB6アプリの支援機能がまだ残っているかもしれません。
InstallShield を使わなくなってすでに10年たってて現状がわかりませんけど。


> COMに関するレジストリの仕組みとか理解していないけど、
> レジストリ キー(?)のGuidの意味が分かれば、
> なんとかなりそうな気がします。

一応書いて置きます。
C#のCOMサーバーを登録するには、regasm を使うか
msiで登録(現行VSIやInstallShieldなどを利用する)する必要があります。
COMの登録の仕組みを知っていればどうにかなるものではないので
その点も踏まえて、インストーラに組み込むことをお勧めします。

引用返信 編集キー/
■81849 / inTopicNo.7)  Re[3]: COMの登録(Component Object Model)
□投稿者/ 魔界の仮面弁士 (955回)-(2016/11/17(Thu) 14:45:42)
No81833 (jinjin さん) に返信
> 魔界さん
> 返信ありがとうございます。
ユーザーへの配布作業は軽視されがちですが、意外と厄介なんですよね。
できればきちんとインストーラーを用意したいところ。
http://bit.ly/2fHwDzC


> VB6のプロジェクト ファイルを指定しておくと、
> 〜.msi まで出力してくれます。
このツールは、VB6 プロジェクトから依存コンポーネントを
検出するために、VB6 のディストリビューション ウィザードの機能を
内部で呼び出しているそうです。



> レジストリ キー(?)のGuidの意味が分かれば、
> なんとかなりそうな気がします。
現状のインストーラーに組み込むのなら、プロジェクト エクスプローラーで
[ターゲット マシン]-[レジストリ]機能から組み込めます。

下記を参考にしてみてください。
http://pao-jp.sblo.jp/article/53358970.html



> 先程、事務の方のPC(Win10 7からの無償アップ)に入っていました"RegAsm.exe"。

なるほど。改めて .NET 4 の再頒布可能パッケージをダウンロードして
みましたが、msi 内に RegAsm も含まれているようです。


> C:Windows\Microsoft〜〜〜 の.NET4 的なフォルダの下にいました。

64bit 環境の場合、2 種類のバージョンがあるのでご注意ください。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe


> お勧めの方法とかあれば、お願いします。
お勧めは特に無いですね…。

下記では、RegAsm を使う案と GAC 登録案が提示されていますが、
一般利用者向けなら、インストーラーを用意したいところです。
https://blogs.msdn.microsoft.com/msiclickonce/2009/10/19/how-to-add-a-net-dll-within-your-application-setup-windows-installer-package-using-visual-studio-20052008/


そういえば、VS2010 のセットアップ プロジェクトで、
COM インターフェイスへのアセンブリの登録が機能しない、
といったケースのトラブルシュートを見つけました。
今回の件に直接関係するものでは無いですが、情報共有として。
https://msdn.microsoft.com/ja-jp/library/kz0ke5xt%28vs.100%29.aspx



>> 「Visual Studio Installer 1.1」(あるいは 1.0)を使っているものと理解しました。
> Visual Studioの6なのかな?
下記の外観のソフトですよね。
http://dobon.net/vb/installer/installer2-2.html


だとすればそれは、"Visual Studio Installer" というものです。
Program Files の下に、下記のヘルプファイルが無いでしょうか。
\Microsoft Visual Studio\Common\Tools\VSInst\VSINSTAL.CHM


「Visual Studio Installer」は、VS6 への追加コンポーネント群であり、
開発環境へ、VS6 本体とは別にインストールが必要です。

バージョン 1.0 は、VS6 Plus Pack の CD-ROM に同梱されています。
VS6 の初期バージョンには含まれておらず、別途入手する必要がありました。
http://ascii.jp/elem/000/000/306/306159/

ただし VS6 の購入時期によっては、Plus Pack が最初から同梱されたものもあります。
https://www.microsoft.com/japan/msdn/vs_previous/vstudio/guide6.0/revguide3.htm

その後、「Visual Studio Installer 1.1」がリリースされました。
私が利用しているのはこちらのバージョンです。

1.0 / 1.1 のいずれも、Web サイトからダウンロード可能でしたが、
現在は公開を終了しています。下記はアーカイブページへのリンクです。
https://bit.ly/2f60007
https://bit.ly/2fGW83Q



> Microsoft Development Environment 6.0
これは統合開発環境のバージョンですね。


> Visual Inter Dev 6.0
Visual Inter Dev ではなく
Visual InterDev が正しい名前です。


Visual InterDev は、Web 開発向けのパッケージであり、
いわゆる Active Server Pages な Web アプリの開発環境です。

Visual InterDev 自体はインストーラー作成ツールでは無いのですが、
DEVENV.EXE は複数製品で共通に使われる統合開発環境(IDE)だったため、
VS6 においては、Visual InterDev や Visual Studio Installer の他、
Visual Stdio Analyzer や Database Project でも利用されています。

Visual J++ も同じインターフェイスですが、こちらは
起動時のスプラッシュ画面が変更されていたかと。


ちなみに VB や VC++ の IDE は当時まだ統合されておらず、
Visual Basic 6.0 は VB6.EXE、
Visual C++ 6.0 は MSDEV.EXE のように、
それらとは別の EXE になっていました。
引用返信 編集キー/
■82005 / inTopicNo.8)  Re[4]: COMの登録(Component Object Model)
□投稿者/ jinjin (4回)-(2016/11/28(Mon) 17:15:31)
No81849 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士様

色々有り難うございました。
お陰様で解決いたしました。


”[ターゲット マシン]-[レジストリ]機能”で、レジストリへ情報を書くことで
COM サーバの登録ができました。


手順を書くと

 1.regasm /regfile でレジストリに書き込むべき情報を取得
 2.プロジェクト エクスプローラで”COM”を含むDLL(及び関連のDLL)をインストール対象に追加
 3.”レジストリ機能”で、regasmから取得した情報を手入力

でうまくいきました。
レジストリのWOW関連もOK.
64/32ビット Windowsにも対応できています。



> >> 「Visual Studio Installer 1.1」(あるいは 1.0)を使っているものと理解しました。
>>Visual Studioの6なのかな?
> 下記の外観のソフトですよね。
> http://dobon.net/vb/installer/installer2-2.html

これです。

このソフトには、”関連付け”-”COMオブジェクト”というものがあり、
本来ならこれでCOMのインストールを行うものと思われますが、

”.NET上で動作するCOM アセンブリ”では、うまく動作しないようです。
ビルドでエラーにはなりませんが、インストールしてもレジストリに
情報が書き込まれません。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -