none
ClickOnce配布パッケージに別定義ファイルを持ちたい RRS feed

  • 質問

  • お世話になります。

    今回Clickonceで以下のことを実現させたいのですが手法がわかりません。よろしければお知恵をお貸しください。

    やりたいこと:

    ○CSSのソフトを自動でバージョン管理させたい

    ○CSSのコンフィグ設定(DB接続先など)が違うものが複数あるが、配布パッケージは一つで済ませたい

    ○パッケージはローカルサーバーの共有フォルダに設定ごとに配置

    理想を言えば、(配布パッケージ+個別コンフィグファイル)という構成で、複数個配置できれば……と考えております。

    わかる方おられましたらよろしくお願いします。

    Visual Studio 2010 C# Framework 4.0

    • 編集済み taritari 2013年9月30日 2:09
    2013年9月30日 1:58

回答

  • やりたいことは、これと同じようなことかな。

    共有フォルダを設定の数だけ複製して、各フォルダに個別の設定ファイルを置いておく方法になります。
    インストールしたい設定の共有フォルダにある*.applicationを実行してインストールして、起動時にその共有フォルダの相対位置に置かれた設定ファイルを読みに行きます。

    static void Main(string[] args)
    {
        //System.Diagnostics.Debugger.Launch();
        //if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
        {
            try
            {
                System.Deployment.Application.ApplicationDeployment dep
                    = System.Deployment.Application.ApplicationDeployment.CurrentDeployment;
                if (dep.IsFirstRun)
                {
                    string settingtext;
                    Uri uri = new Uri(dep.UpdateLocation, "./setting.txt"); //ClickOnceの配置場所に対する相対位置に置かれたテキストファイル
                    if (uri.Scheme.Contains("file"))//共有フォルダにある*.applicationからインストールした場合
                    {
                        using (System.IO.StreamReader reader = new System.IO.StreamReader(uri.LocalPath))
                        {
                            settingtext = reader.ReadToEnd();
                        }
                    }
                    else //webサーバー上の*.applicationからインストールした場合
                    {
                        System.Net.WebClient client = new System.Net.WebClient();
                        client.Encoding = System.Text.Encoding.UTF8;
                        settingtext = client.DownloadString(uri);
                                
                    }
                    Console.WriteLine(settingtext);
                }
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
            }
        }
    }

    これと違うのは共有フォルダなのでfile://で始まるuriになるのでそのままファイルを開いて読み取ってます。

    #重複してインストールはできませんが


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)


    • 編集済み gekkaMVP 2013年9月30日 9:55
    • 回答としてマーク taritari 2013年10月1日 3:22
    2013年9月30日 9:52

すべての返信

  • やりたいことは、これと同じようなことかな。

    共有フォルダを設定の数だけ複製して、各フォルダに個別の設定ファイルを置いておく方法になります。
    インストールしたい設定の共有フォルダにある*.applicationを実行してインストールして、起動時にその共有フォルダの相対位置に置かれた設定ファイルを読みに行きます。

    static void Main(string[] args)
    {
        //System.Diagnostics.Debugger.Launch();
        //if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
        {
            try
            {
                System.Deployment.Application.ApplicationDeployment dep
                    = System.Deployment.Application.ApplicationDeployment.CurrentDeployment;
                if (dep.IsFirstRun)
                {
                    string settingtext;
                    Uri uri = new Uri(dep.UpdateLocation, "./setting.txt"); //ClickOnceの配置場所に対する相対位置に置かれたテキストファイル
                    if (uri.Scheme.Contains("file"))//共有フォルダにある*.applicationからインストールした場合
                    {
                        using (System.IO.StreamReader reader = new System.IO.StreamReader(uri.LocalPath))
                        {
                            settingtext = reader.ReadToEnd();
                        }
                    }
                    else //webサーバー上の*.applicationからインストールした場合
                    {
                        System.Net.WebClient client = new System.Net.WebClient();
                        client.Encoding = System.Text.Encoding.UTF8;
                        settingtext = client.DownloadString(uri);
                                
                    }
                    Console.WriteLine(settingtext);
                }
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
            }
        }
    }

    これと違うのは共有フォルダなのでfile://で始まるuriになるのでそのままファイルを開いて読み取ってます。

    #重複してインストールはできませんが


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)


    • 編集済み gekkaMVP 2013年9月30日 9:55
    • 回答としてマーク taritari 2013年10月1日 3:22
    2013年9月30日 9:52
  • 無事実現出来ました。ありがとうございます。

    プログラム上で設定データを取得するというのは気づきませんでした。

    設定だけで何とかしようとしてハマってました。


    2013年10月1日 3:22