- PR -

.NET Compact 2.0上で

1
投稿者投稿内容
dartagnan
会議室デビュー日: 2007/01/27
投稿数: 2
お住まい・勤務地: 京都府
投稿日時: 2007-01-28 00:25
初めまして。困ったことがあり,お力をお貸しいただければと思い,やって参りました。

.NET Compact 2.0上で開発中のアプリケーション(C#)で,アプリケーションデータ用のフォルダを取得しようとして,次のようなコードを書きました。

コード:
class App
{
    public static string DataDirectory;

    public static void Main()
    {
        DataDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

        Application.Run(new AppForm());
    }
}



これで,コンパイルは通るのですが,実行時に,

System.InvalidOperationException はハンドルされませんでした。
Message="InvalidOperationException"
StackTrace:
場所 System.Environment.GetFolderPath()
at App.Main()

というようになってしまいます。

InvalidOperationExceptionについては調べてみて,スレッド間の操作に関する例外らしいということは分かったのですが,上記のようなシンプルなコードで,例外になる理由がどうも分かりません。実際,同じコードが(Compactでなくて).NET 2.0上では問題なく動作しています。

.NET初心者なので,ひどい見落としをしていないか不安ですが,見当つきかねて,質問させていただきました。解決策をご存じの方,ご教授よろしくお願いします。

開発環境はVisual Studio 2005で,Pocket PC 2003 SE エミュレータ上で動かしています。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-01-28 10:28
引用:

InvalidOperationExceptionについては調べてみて,スレッド間の操作に関する例外らしいということは分かったのですが,



この場合、スレッド云々は関係ないでしょうね。

InvalidOperationException のヘルプには「オブジェクトの現在の状態に対して無効なメソッド呼び出しが行われた場合にスローされる例外。」とだけあるので、例外の原因はスレッド云々だけに限ったものではありません。

引用:

上記のようなシンプルなコードで,例外になる理由がどうも分かりません。



ヘルプに取り立てて記述されていないようですが、単純に、Enviroment.SpecialFolder.ApplicationData が Pocket PC 2003SE でサポートされていないんじゃないでしょうか。

Windows CE は上位の Windows OS とは異なる部分が多いので、そんなもんかなという気がします。
dartagnan
会議室デビュー日: 2007/01/27
投稿数: 2
お住まい・勤務地: 京都府
投稿日時: 2007-01-28 17:47
渋木様

回答ありがとうございました。
さっそくためしに他の定数(Enviroment.SpecialFolder.Programs)を渡したところ,問題なく動きました。
ApplicationData自体はCompactでもサポートされる,とドキュメント上でなっているので多分そうなのだと思いますが,「現在のローミング ユーザーのアプリケーション固有のデータの共通リポジトリとして機能するディレクトリ」を返すとのことで,この「ローミングユーザ」というのをよく理解していないことが原因だったように思われます。

とりあえず,"\\Application Data"を直接指定するという方法で当面は満足することにして,さらに確実な方法を探してみようと思います。

たいへん助かりました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)