none
VS2008で作成したクライアントアプリが一部のVistaで動かない RRS feed

  • 質問

  • VS2008(VB2008)でクライアントアプリケーションを作成しました。

    本アプリはクライアントのインベントリ情報を収集し、管理サーバのFTPサイトに結果テキストファイルをアップロードするものです。

    また動作状況をカレントフォルダにログファイルとして出力します。

    VS2008でSetupProjectを作成し、インストーラーを作成しました。

    .NET3.5がInstallされている環境様々なOS(Xp移行)で動作検証を行いましたが、Vistaでも動作するものもあるのですが

    動作しないVistaが存在します。

    動作しない事象としては、サーバのFTPサイトへの接続が出来ない、カレントフォルダ(EXEファイルが存在するフォルダ)にログファイルが

    作成できない状態です。

    憶測ですが、セキュリティやアクセス権的な問題があるような気がしますが、これといった箇所が見つかりません。

    Administratorsは「特殊なアクセス許可」以外はチェックが入っています。

    同じような現象に遭った方、対処方法などありましたらご教授下さい。


    furuyosi
    2010年7月27日 6:03

回答

すべての返信

  • 動作しない事象としては、サーバのFTPサイトへの接続が出来ない、カレントフォルダ(EXEファイルが存在するフォルダ)にログファイルが

    作成できない状態です。

    憶測ですが、セキュリティやアクセス権的な問題があるような気がしますが、これといった箇所が見つかりません。


    「カレントフォルダ(EXEファイルが存在するフォルダ)」は具体的にどういった場所なのでしょうか? C:\Program Files の下とか?
    自分なら、まずはじめに UAC 絡みを疑ってみますが。
    2010年7月27日 6:42
  • totojo さんとかぶりますが、
    次の2つが影響している可能性があると思いました。
    ・ファイアウォールの状態
    ・UAC の状態

    問題の切り分けとして、一度次の状態で動作を確認されてはいかがでしょうか?
    ・ファイアウォールのすべてを無効にする
    ・UAC を無効にする

    これで正常動作するのでしたら、両方を有効に戻してから、それぞれの対策を検討されてはと思います。

    2010年7月27日 6:45
  • FirewallをOffにしても改善しませんでした。

    UACをOFFにしたら、問題なく起動しました。

    後で気がついたのですが、本プログラムはスタートアップで起動する場合と、通常メニューで起動する方法で起動する方法の

    2通りがああります。

    今回不具合を発見したのはスタートアップで起動した場合で、通常起動の場合は確かめてませんでした。

    (これから確かめます。)

    で、解決したのはいいものの、UACをOFFすることによるリスクは具体的にどのようなものがあるのでしょうか。


    furuyosi
    2010年7月27日 7:05
  • UAC は絶対に OFF にすべきでないと思います。
    UAC を OFF にするということは、自分の身に覚えのないプログラムによって PC の中身を好き勝手される危険性がある、と考えていいと思います。
    TH01 さんが UAC を無効にして確認してみては? と提案されているのは、原因が UAC に関係するものかどうかの切り分けとして一時的に OFF にしては? ということだと思います。

     ユーザー アカウント制御の設定とは
     http://windows.microsoft.com/ja-JP/windows7/What-are-User-Account-Control-settings

     Living with and benefiting from User Account Control (from Windows Vista Inside Out)
     http://windows.microsoft.com/ja-JP/windows-vista/Living-with-and-benefiting-from-User-Account-Control-from-Windows-Vista-Inside-Out

    ですので、UAC を OFF にして解決したのではなくて、原因が判明しただけのことです。
    UAC を OFF にしないと書けない場所にログを書こうとする、Vista 的に行儀が悪い処理を修正するべきだと思います。
    2010年7月27日 7:25
  • totojo さん、補足ありがとうございました。
    私の場合、ファイアウォールを止める場合は、息も止めてます。

    UAC を有効にした場合の開発者にとっての不都合話は、検索することでその対策を含めて多く見つかると思います。

    それに加えて最近、私がハマったことを補足しますと、管理者権限が必要なプログラムをスタートアップに登録しても動作しません。
    対策としてはタスクスケジューラに登録する必要があります。
    これも検索すると方法は見つかると思いますので調べてください。
    (追記:ログファイルの場所を適切にすることなどによって管理者権限がいらないようにできれば、それがベストです。)

    • 編集済み TH01 2010年7月27日 7:52 追記
    2010年7月27日 7:48
  • Deleted
    2010年7月27日 8:03
  • ご指摘の通り、Program Filesフォルダ配下のフォルダにアプリケーションフォルダを配置し、そのフォルダ配下に

    ログファイル出力、一時ファイルの出力を行っており、これがVista的に(Win7も?)NGだったんでしょうか。

    対策として、例えばUACに引っかからないフォルダにログ出力場所を変更しようかと考えていますが

    どのような場所が宜しいのでしょうか?

    (例えばログインアカウントのマイドキュメントフォルダとか。)


    furuyosi
    2010年7月27日 8:08
  • 最近よく似たスレッドを何度か見たように思うのでうすが、次の URL の記事はいかがでしょうか。

     リソースの管理 - Windows 7 対応アプリケーションの互換性
     http://msdn.microsoft.com/ja-jp/windows/dd882533.aspx

    2010年7月27日 8:46
  • 検索して調べてみたらいかがですか?
    と思いながら、検索して調べた結果を追加情報としてお知らせします。

    @IT .NET TIPS アプリケーション設定情報はどこに保存すべきか?
    http://www.atmarkit.co.jp/fdotnet/dotnettips/263apppath/apppath.html

    アプリケーション設定情報の保存場所
    ※ リンク先の回答にあるリンク先も為になります。
    http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/cdafb223-7296-4456-89e9-49468267525c

    UAC の影響を受けずに単純に扱えるのは「ユーザー個別」用のフォルダです。
    マイドキュメントのフォルダもユーザー個別ですが、ここはユーザー自身のファイル置き場なので、アプリケーションのデータ置き場としてはあまりよくないかもしれません。
    ただ、ログを回収する際にはユーザーに伝えやすいですね。

    • 回答としてマーク furuyosi 2010年7月28日 2:11
    2010年7月27日 9:38
  • なるほど、XpとVista、Win7ではプログラム作成の流儀が変わったのですね。

    自分のPCがXpなので気にも留めませんでしたが、これからはこの指針でやらないと思わぬ落とし穴がありますね。

    参考になりました。ありがとうございました。


    furuyosi
    2010年7月28日 2:13
  • Deleted
    2010年7月28日 3:14