初歩的な質問ですいません。よく配布されているVB6ランタイムをインストールしても、作成したアプリがDLLドライバ(MSFlexgridが多いような・・)が無いと結局、作成に使用したツールVB6をインストールせざるを得ない状況が結構ありました(エラーになるDLL&ORXをwindowsフォルダにコピーすればいいんですが・・)。
確か、ウイザードでディストリビューションでsetup.exeを作成すればランタイムを含め、アプリで使われているドライバ類は含んでコンパイルされると思うのですが、XPやVistaなど、VB6のサポートが終了したOSでも問題なく動くのでしょうか?お聞かせいただけないでしょうか?
各種 OCX や DLL は、それ単体では動作しません。
DLL が内部的に呼び出している DLL もありますので、そうした依存ファイルも
合わせてインストールしなければいけませんし、場合によってはレジストリ登録も必要です。
> 作成に使用したツールVB6をインストールせざるを得ない状況が結構ありました
VB6開発環境は、ユーザ別ライセンスです。自分が使わないユーザーのPCに対して
インストールして使わせることは、ライセンスに抵触する可能性があります。
なお、本来は開発時にしか必要でないファイルが、何らかの理由で
参照設定等に含まれてしまったがゆえに、最小限のランタイムファイルだけでは
動作しない結果になるというケースも見受けられますので、どのファイルが
問題になっているのかを、きちんと把握しておくべきでしょう。
> アプリで使われているドライバ類は含んでコンパイルされると思うのですが
ドライバ…とは、具体的に何のことでしょうか?
ハードウェアドライバ等が配布されるという話は聞いたことがありませんし、
それはたとえば、ODBC ドライバとか、JET エンジン等のことでしょうか。
ODBC や JET だとすれば、VB のランタイムとは別扱いなので、別途、
特定バージョンの MDAC や JET のインストールが必要となったりしますね。
> XPやVistaなど、VB6のサポートが終了したOSでも問題なく動くのでしょうか?
開発環境に対するサポートと、実行環境にたいするサポートは別物です。
(そもそも VB6に対するサポートは、先週、既に終了しています)
たとえば、Vista は MSVBVM60.DLL の動作を保障していますし、
その DLL のサポートは、Vista がサポートされる限り続きます。
なお、「Vista 用 MSVBVM60.DLL」「XP 用 MSVBVB60.DLL」「VB6同梱 MSVBVM60.DLL」などは
それぞれ別のサポートサイクルおよび利用権が適用されます。
(たとえば、Vista 用 MSVBVM60.DLL は再頒布が許可されていません)
ありがとうございます。
ん〜配布の権利にも色々あるんですね。と言うとVectorなどにVB6 ランタイムなどありますが、本来違法なんですかね?
また、よくソフトウエア会社などVBのアプリを納品する時、これらのDLL類をコピーしてますが、これはMicrosoft社に対していくらか払っているのでしょうか?
VBのアプリを開発できても自分が利用しないからと言って、DLL類を移動できないと言うのもおかしいですね。ソフトウエア会社は成り立ちませんね、Microsoftは・・。やっぱり、オープンソースですかね、根本がゆらいできました。
>ドライバ…とは、具体的に何のことでしょうか?
すいません。DLL&ORXを総じてドライバと書きました、間違っていましたら申し訳ありません。
> なお、「Vista 用 MSVBVM60.DLL」「XP 用 MSVBVB60.DLL」「VB6同梱 MSVBVM60.DLL」などは
> それぞれ別のサポートサイクルおよび利用権が適用されます。
自分のWin2kマシンの開発環境でウイザードのsetup.exeを作っても、XPやVistaのMSVBVM60.DLLを上書きする訳には行きませんね、これも悩ましい所です。
貴重なお話、ありがとうございました。とても参考になりました。
> ん〜配布の権利にも色々あるんですね。
DLL によって、アプリケーションと共に再頒布する場合の許諾条件は異なります。
詳細は、VB6 付属の EULA.TXT および REDIST.TXT に書かれていますので、そちらをご覧ください。
また、そうした許諾条件が書かれていない範囲のファイルは、通常、再頒布できません。
http://support.microsoft.com/kb/412675/ja
http://support.microsoft.com/kb/198052/ja
> と言うとVectorなどにVB6 ランタイムなどありますが、本来違法なんですかね?
ランタイムのみを配布できるのは、Microsoft による一時頒布のみです。
我々が、ランタイムを単体で再頒布することは許可されていませんが、
VB6 製の自作ソフトとともに再頒布することは許可されています。
> これらのDLL類をコピーしてますが、
インストーラを使わずに、DLL を単純コピーすることも可能ですが、個人的にはお勧めできません。
依存ファイルとのバージョン整合性が取れなくなることにより、いわゆる「DLL Hell」と呼ばれる
問題を引き起こす可能性があるからです。Side-by-side 以外では、インストーラを使うべきかと。
> これはMicrosoft社に対していくらか払っているのでしょうか?
再頒布の仕方に条件はありますが、実行時(ランタイム)ファイルの多くは無料で再頒布できます。
ただし他社(サードパーティ)製品の場合は、ロイヤリティが発生するものも少なくありません。
また一般的には、開発時(デザインタイム)ライセンスは、再頒布不可(またはロイヤリティが発生)となります。
ゆえに、(ランタイムではなく)開発環境そのものをユーザ環境にインストールすることはできません。
> DLL&ORXを総じてドライバと書きました
なるほど、そういう意味でしたか。了解しました。
ただ、質問文の中に「ランタイム」と「ドライバ」という表現が出てきていますが、
それぞれの違いが分かりませんでした。どのように使い分けておられるのでしょうか。
また、ORX とは何の事でしょうか?
> 自分のWin2kマシンの開発環境でウイザードのsetup.exeを作っても、
> XPやVistaのMSVBVM60.DLLを上書きする訳には行きませんね、これも悩ましい所です。
インストーラは、新しいDLLを古いDLLで上書きしないよう、バージョンチェック機構が含まれています。
また、同じバージョンでも、日本語版DLLと英語版DLLといった、言語違いのチェックも行われます。
そのため、インストーラを使う限りは、そのような上書き処理は通常発生しません。
また、セットアップパッケージに含まれるのは、システムフォルダにある MSVBVM60.DLL ではなく、
再頒布用の別ファイルです。具体的なパスは、ディストリビューション ウィザードか、
Visual Studio Installer かによって異なりますけれども。
特に気をつけなければいけないのは、基本ランタイム以外のファイル群についてです。
たとえば、Excel を参照設定して使っている場合、インストーラの生成時に、Excel.exe が
再頒布対象に含まれてしまう事がありますが、これは当然、再頒布することができません。
インストーラ作成時に含めないよう、注意しておく必要があるでしょう。
詳細にご説明いただきありがとうございます。
> VB6 製の自作ソフトとともに再頒布することは許可されています。
> ゆえに、(ランタイムではなく)開発環境そのものをユーザ環境にインストールすることはできません。
なるほど、これさえ保障されていればほっとできますね。それでは何故ディストリビューションのツールが存在するのかと思ってしまいました。
> そのため、インストーラを使う限りは、そのような上書き処理は通常発生しません。
と、言いますと普通にディストリビューションウイザードから、全て含んでコンパイルしても良さそうですね(使う分には)。Vistaで標準搭載されているものとは別のランタイムが適用されるのも安心できますね。後は部品ですね。
> また、ORX とは何の事でしょうか?
普通にexeで作成し、別マシンで動作に必要なものが無い場合、エラーメッセージが出力されたと思うのですが(MSFlexGridの場合は確かMFGRID.ORXだったような・・OCXかな?DLLかな?)。
ランタイムとはドライバも含まれたものと思ってましたが、VB6ランタイム
をインストールしたにも関わらずこのようにドライバが無いと言われ、別の呼称かと思い、このように表現しました。(具体的にどんなものか把握してませんが)
ありがとうございました。
> なるほど、これさえ保障されていればほっとできますね。
# 誤解を生みそうな引用の仕方をされてしまったのが気になりますが、
# 意図は通じたようなので、それはとりあえずそれは置いといて:
何にしても、EULA.TXT や REDIST.TXT を熟読しておいてくださいね。(面倒でも)
> と、言いますと普通にディストリビューションウイザードから、
> 全て含んでコンパイルしても良さそうですね(使う分には)。
それだけではマズイと思います。配布不可能なパッケージになる可能性があるためです。
上書きの問題が無いので、動作的に問題が無いとお考えなのかも知れませんが、
再頒布不可とされる物を含めてしまっては、ライセンス上の問題が発生する可能性が
ありますし、そもそも配布したプログラムが、本当に再頒布可能なファイルだけで
動作するのかどうかも、見極めておかねばなりませんよね。
> Vistaで標準搭載されているものとは別のランタイムが適用されるのも安心できますね。
たとえば、MSVBVM60.DLL についてみると、このようなバージョンが存在します。
Ver.6.0.97.97 : × : Windows Vista
Ver.6.0.97.82 : ○ : Visual Studio 6.0(SP6), Windows Server 2003(SP1)
Ver.6.0.96.90 : × : Windows Server 2003, Windows 2000(SP4), Windows XP(SP2)
Ver.6.0.93.30 : × : SharePoint Services
Ver.6.0.92.37 : × : Windows XP, Windows XP(SP1)
Ver.6.0.89.64 : ○ : Visual Studio 6.0(SP5)
Ver.6.0.88.77 : ○ : Visual Studio 6.0(SP4)
Ver.6.0.84.95 : ○ : Visual Studio 6.0(SP3), Windows 2000 Server, Office XP, SQL Server 2000(Rel.A)
Ver.6.0.84.50 : × : SQL Server 2000, SBS 2003
Ver.6.0.82.68 : ○ : Visual Studio 6.0(SP2), Office 2000
Ver.6.0.81.76 : ○ : Visual Studio 6.0
# 他にもありますが、キリがないので割愛。
○を付けているのは、VB6 に含まれているため、再頒布が許可れたバージョンです。
×は開発ツールではなく、OS その他の製品に含まれるものであるため、再頒布が
許可されていない(もしくは制限のある)バージョンです。
ご覧のように、Vista のそれは、他の物よりもバージョンが高いので、たとえば、
6.0.84.95 を含んだインストーラを Vista 環境で実行しても、Vista にある 6.0.97.97 が
古いバージョンに置き換わる事はありません。その一方で、Vista 付属の 6.0.97.97 を、
他の環境(たとえば、Windows 2000 など)に再頒布することはできません。
作成したパッケージに含まれているファイルが、再頒布可能なファイルであるか、
EULA.TXT や REDIST.TXT で確認してください。また、そのファイルが OS 付属の物ではなく
再頒布を許可された(開発ツールに付属の)物であることを、今一度確認しましょう。
http://support.microsoft.com/dllhelp/
> (MSFlexGridの場合は確かMFGRID.ORXだったような・・OCXかな?DLLかな?)。
ORX というのは聞いた事がありませんが、私が知らないだけなのかも知れません。
できれば、正しい名称を確認していただけないでしょうか?
なお、私が知る限り、MSFlexGrid の依存ファイルとなるのは
MsFlxGrd.ocx
ComCat.dll
および、言語依存ファイルとなる
FlxGdJP.dll (日本語)
FlxGdDE.dll (ドイツ語)
FlxGdFR.dll (フランス語)
FlxGdIT.dll (イタリア語)
FlxGdES.dll (スペイン語)
FlxGdKO.dll (韓国語)
FlxGdCHT.dll (繁体中国語)
FlxGdCHS.dll (簡体中国語)
の 3 ファイルだと認識しています。(英語版には、言語依存ファイルがありません)
> (具体的にどんなものか把握してませんが)
是非とも把握しましょう。インストーラの作成者さえ、内容を把握できていないような配布物を、
アプリケーションの利用者にインストールさせるというのは、聊か乱暴すぎる行為でしょうし。
ありがとうございます。
わざわざ、コピペいただきありがとうございました。
配布時に必ず一つ一つ探して確認します(抵触するのも怖いですし)。
> できれば、正しい名称を確認していただけないでしょうか?
コンポーネントの設定画面でしっかりファイル名が表示されるんですね。
私の間違いでした。
ご丁寧に本当にありがとうございました、大変勉強になりました。
>>わざわざ、コピペいただきありがとうございました。
イラッとしたのは自分だけだろうか。
ななしさん
表現で不快に思われましたら、申し訳ありません。
魔界の仮面弁士さんには、大変感謝しております。
何年か前も困った時、的確な助言をいただき何度も助けられました。
ペンネームを覚えてました。
本当にありがとうございます。誤解を招く表現でしたら申し訳ありません。