複数台インストールし、1台だけこのような症状になりました。インストールしたexeファイル等の権限は全てフルコントロールになっています。
原因として何が考えられるでしょうか?
ソフトウェアはVB6で作成され、ディストリビューションウィーザードでインストーラーを作成したものからインストールしました。
http://dobon.net/vb/installer/installer2-1.html
ディストリビューションウィザード: VBに適したインストーラを探そう
VB6.0(SPの一致するもの)ランタイムのインストールがされていないのではないでしょうか。
windows2000ではmsvbvm50.dllがないといけないうわさがあるとのことです。
醤板! 坪軒焼
URLはダミーです。
失敗した1台はNTですか?2000ですか?XPですか?
おそらくXPではないでしょうか?
(一般ユーザのフォルダやレジストリに対する対する権限が微妙に厳しくなっていたように思います)
そのパソコン(XP)の一般ユーザの権限(インストールしたexeファイル等のフォルダではなくシステム関係のフォルダへのアクセス権限)が厳しくなっているからではないでしょうか?
さしあたりパワーユーザか最悪アドミニストレータグループに放り込んで違いを確認されてはいかがでしょうか?
(※直接の解決策は提示しておりませんのでポイントは結構です)
http://www.microsoft.com/japan/msdn/windows/windows2000/win2000a...
このページは、存在しないか、削除されています。
URL はアプリケーション開発時の注意点です。
「セキュリティ問題」の項目を参照してください。
考えられる原因はいくつかあると思いますが、
・Program Files にファイルを書き込もうとしている
・レジストリ HKEY_LOCAL_MACHINE に書き込もうとしている
といった原因が該当しているのでは?と思います。
http://www.atmarkit.co.jp/fwin2k/win2ktips/111regmon/111regmon.h...
@IT:Windows TIPS -- Tips:レジストリへのアクセスをモニタする方法
また、自作のプログラムで無い場合、
どのようなレジストリを参照しているかが分かりません。
このような場合「regmon」というツールを使うと、
どのようなレジストリの項目にアクセスしているかを
調べることができます。
http://www.atmarkit.co.jp/fwin2k/win2ktips/059execau/execau.html
@IT:Windows TIPS -- TIPS:一時的にほかのユーザー権限でプログラムを実行する方法(ショートカット・メニューを利用する方法)
また、根本的な解決策では無いかもしれませんが、
「一時的にほかのユーザー権限でプログラムを実行する方法」
という方法があります。
参考まで。
ありがとうございます。
・Program Files にファイルを書き込もうとしている
Cドライブの直下にフォルダを作り、そこにEXEファイルを書き込んでいます。
インストール自体はできるのです。
・レジストリ HKEY_LOCAL_MACHINE に書き込もうとしている
ここには何も書き込んでいないようですが確認してみます。
2番目のツール便利ですね。今後活用したいと思います。
3番目、興味深いです。臨時のときに便利そうです。あとでゆっくり読ませていただきます。
http://support.microsoft.com/?kbid=256986
Windows registry information for advanced users
先ほど補足です。
> ・Program Files にファイルを書き込もうとしている
と書いたのは
「インストール実行時」の話ではなく、
「アプリケーション実行時」の話です。
C:¥Program Files¥<App Name> の下にアプリケーションを
インストールすることは問題ありません。
ただ、アプリケーション実行時に設定ファイル(例:AppName.ini)
のようなものを読み書きする仕組みになっていると、
C:¥Program Files¥<App Name>¥AppName.ini
をアクセスしたときに、アクセス違反となり、
結果としてなんらかのプログラム(DLL)が「初期化失敗」となる可能性はあります。
また、
> ・レジストリ HKEY_LOCAL_MACHINE に書き込もうとしている
についてですが、
通常は、アプリケーション用のレジストリ項目を作成する場合は、
・HKEY_LOCAL_MACHINE(すべてのユーザーに適用。以下 ”HKLM” と省略します。)
ではなく
・HKEY_CURRENT_USER(ログオンしているユーザーに適用。以下 ”HKCU” と省略します。)
を使うことが推奨されています。
HKLM の場合、セキュリティの設定が厳しく、アクセス許可のある
ユーザーが Administrators に制限されている可能性があります。
この為、一般ユーザーでログオンしアプリケーションを実行した場合、
HKLM¥SOFTWARE¥<Company Name>¥<App Name>
にアクセスした場合、たとえば、書き込みを行おうとした場合に、
「アクセス違反」となり結果として「初期化失敗」となる可能性はあります。
http://www.microsoft.com/windows2000/ja/server/help/permit_key_r...
Windows 2000 Server
また、これも根本的な解決策ではないのですが、
「regedt32.exe」というツールを使うと
強制的にレジストリのアクセス権を変更することが可能です。
先ほどの
HKLM¥SOFTWARE¥<Company Name>¥<App Name>
に対して、一般ユーザー(Users)にフルコントロールの
アクセス権を割り当ててあげると、アプリケーションが
動作するようになるかもしれません。
レジストリの設定を変更するのは大変危険ですから、
もし、行う場合は、十分に注意してから行うように
してください。
(動かなくなっても、保証しかねますので・・・(^^A)
http://support.microsoft.com/?kbid=815065
What is a DLL?
また、トレースする別の方法として、
■ Dependency Walker(depends.exe)
http://www.dependencywalker.com/
Dependency Walker (depends.exe) Home Page
というフリーソフトを使う方法があります。
「Dependency Walker」はその名の通り、
アプリケーションの「依存関係(どのような DLL を利用しているか?など)」
を調査するためのツールです。
<簡単な使い方>
1. Dependency Walker(depends.exe)を起動
2. [File] - [Open] で対象となるアプリケーション(*.exe)を選択
3. [Profile] - [Start Profile] を選択し [OK] ボタンを押下
これを行うことで、アプリケーションが実行時に
どんな DLL を利用しているかが分かります。
(ログ表示ウィンドウにリアルタイムに情報が表示されます。)
「初期化に失敗しました」とエラーが表示される直前に
読み込まれた DLL を調べることによって、
どの DLL の読み込みに失敗したのかが分かる「かも」しれません。
参考まで。
詳しいご解説、ありがとうございました。
ありがとうございます。
OSは2000です。
ただ、権限についてはかなりついています。
一般ユーザーはシステムフォルダの内容を変更することが出来ないようになっています。
(それはインストールできた端末も同じなのですが・・・)
権限関係、もう一度確認してみます。