記事カテゴリ

ユーザー機能


 2024年4月28日(日) 05:17 JST

ClickOnce がようやく動いた

  • 投稿者:
  • 表示回数
    8,330

先日から、VS2005の気になる機能であるClickOnceのサンプルを試しているのだが、何度作成し直してもいつも実行時エラーになる。
サンプルは、MSDNの「10 行でズバリ !! ClickOnce (C#)」なのであるが、実行すると下記の部分でエラーが発生する。

ApplicationDeployment deply = ...

エラー内容は、下記のとおり。

InvalidDeploymentException はハンドルされませんでした。

トラブルシューティングのヒントとして、下記のとおりマニフェスト周りとされているが、このアプリケーションマニフェストの作成手順が全くわからなかった。メニューにも作成方法はないし、そもそもVS2002でしかさわる必要が無いのでは?と思っていたファイルなのだ。

このアプリケーションのマニフェストが有効であることを確認します。

仕方が無いので、Visual Studio Users Groupの初心者何でもフォーラムで聞いてみる...
その投稿は、アプリケーションマニフェストの作成手順なのであるが、小野@どっとねっとふぁん様の指摘により、元のソースコードが間違っていることが判明、よく見ると確かに ClickOnce を使っているか判定する if 文が二箇所にあるのだが、二箇所が全く正反対の意味で使われていた。
全く、元のソースに間違いがあるなんて思ってもいなかったので、全然気づかなかった。

忘れないように、修正したコードをメモを残すことにする。φ(≧。≦)最近物忘れが激しくてのぉ。。。。

using System.Deployment.Application;

private void button1_Click(object sender, EventArgs e)
{
    // ClickOncenでインストールされたか確認
    if (!ApplicationDeployment.IsNetworkDeployed)
    {
        MessageBox.Show("ClickOnce を使用していません。");
       return;
    }
    // 強制的にアップグレード
    ApplicationDeployment deploy;
    deploy = ApplicationDeployment.CurrentDeployment;
    deploy.Update();//アップグレードの実行
    MessageBox.Show("更新終了。再起動します。");
    Application.Restart();
}
private void Form1_Load(object sender, EventArgs e)
{
    // ClickOnce でインストールされていた場合、バージョン表示
    if (ApplicationDeployment.IsNetworkDeployed)
    {
        // 現在のバージョンをタイトルバーに表示する
        ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;
        this.Text = deploy.CurrentVersion.ToString();
    }
}

修正したら、他は問題なく動作しました。

以前も書いたのだが、登録フォームなどの登録ボタンにこの機能を割り当てようと思っている。
ずっと登録画面で放置されている場所では、ここしか登録する場所がない。( ̄□ ̄;)!!
いつもメニューに戻ってくれるなら、メニューのボタンに登録する方が楽なのだが...
登録ボタンに割り当てると、せっかく入力した内容が消えることになるので、次は入力した内容を XML ファイルに保存しておいて、再起動後に読み込めればいいかな(その項目があった場合。入力チェックが変わってたら面倒だな...)と考えている。

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/060126_clickonce

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。