こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

.netFrameworkを利用したフォームアプリケーションの起動に関して

FileStreamを利用したファイルの読み込みを行うアプリケーションを作成しています。

【開発環境】
VC++2008、.netFrameworkを利用したWindowsフォームアプリケーションです。
また、開発とテストに用いているのはWindowsVistaです。

【作成したアプリケーションのフォルダ構成(概略)】
[フォルダ:App]
 L[ファイル:app.exe]
 L[フォルダ:msg]
   L[ファイル:config.cfg]

【現状】
app.exeからconfig.cfgを読み込みます。
ビルドしてReleaseフォルダ内に出来るapp.exeを起動すれば普通に読み込むことが出来ています。
しかし.netFrameworkのインストールされていないマシンを使用している知人に動かしてもらったところ、「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります」というエラーメッセージが出たそうです。
そのため、VisualStudioのセットアップウイザードを使ってインストーラを作成しました。
しかし今度は自宅のVistaでインストールして動かしてみると、「パス'[config.cfgへのパス]'へのアクセスが拒否されました」と出ます。

【作成したプログラムの抜粋】
System::IO::FileStream^ fs = gcnew System::IO::FileStream("msg/config.cfg",System::IO::FileMode::Open);
System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(fs);
String^ strLine;
strLine = sr->ReadLine();
sr->Close();
fs->Close();

【質問】
・インストーラを作成せずに、Releaseフォルダを直接圧縮して配布する方法はあるのでしょうか。可能であればこちらが理想です。
・上記の方法が不可能でインストーラの作成が必要な場合、config.cfgの読み込みはどうすればいいのでしょうか。

もしどちらも不可能であれば、ユーザには先に.netFrameworkランタイムをインストールしてもらってからReleaseフォルダのexeを起動してもらうことにしますが、上記のどちらかの方法が可能であればと思い質問させていただきました。
よろしくお願いします。

投稿日時 - 2009-08-02 14:15:07

QNo.5175598

暇なときに回答ください

質問者が選んだベストアンサー

実行して正しく動作させるには、以下の条件が必要です。
条件1:ランタイムライブラリがインストールされていること。
条件2:実行時、アプリのインストール先のフォルダにアクセス権があること。

>ビルドしてReleaseフォルダ内に出来るapp.exeを起動すれば普通に読み込むことが出来ています。

コンパイル出来る環境ならランタイムライブラリがインストールされているので、条件1をクリアしています。

コンパイルした後のReleaseフォルダは、現在ログインしているユーザー用の個人用フォルダ(Vistaの場合C:\Users\ユーザ名\Local Settings\~~)の下にある筈なので、条件2をクリアしています。

なので、この状態で起動すれば正常に動作します。

>.netFrameworkのインストールされていないマシンを使用している知人に動かしてもらったところ

ランタイムライブラリが未インストールなので条件1をクリアしていません。

なので、この状態では起動さえしません。

>今度は自宅のVistaでインストールして動かしてみると、「パス'[config.cfgへのパス]'へのアクセスが拒否されました」と出ます。

インストーラーを作成してインストールすると、通常、アプリケーションは「C:\Program Files\の下」にインストールされます。

UACがオンの状態では
C:\Program Files\app\

C:\Users\ユーザー名\AppData\Local\VirtualStore\Program Files\app\
にリダイレクトされます。

C:\Users\ユーザー名\AppData\Local\VirtualStore\Program Files\app\
にはmsgと言うフォルダはありませんから、当然、ここにアクセスすると「パス'[config.cfgへのパス]'へのアクセスが拒否されました」になります。

また、ここにmsgというフォルダがあってconfig.cfgがあったとしても、ログインし直してユーザーを変えてしまうと「異なるconfig.cfgをアクセスする」ので、ユーザーごとにコンフィグ内容が違ってしまいます。

UACをオフにすれば
C:\Program Files\app\

C:\Program Files\app\
のままで
C:\Program Files\app\msg\
にconfig.cfgも存在するのですが、ここは一般ユーザーにはアクセス出来ませんので「パス'[config.cfgへのパス]'へのアクセスが拒否されました」になります。

そういう訳で

「VISTA用のアプリを作成する場合、アプリが存在するフォルダ以下に書き込みをする場合は、マニフェストを埋め込むなどでコンピューターの管理者権限で実行し、システムフォルダにアクセスする権限を得て、かつ、UACのリダイレクトを回避するなどしてUACがオンでもオフでも同じ動作をする」

と言う対処をしなければなりません。

投稿日時 - 2009-08-03 11:36:54

お礼

ありがとうございます。無事解決することが出来ました。
おかげさまで何とか完成できそうです。

投稿日時 - 2009-08-05 20:41:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問