web-dev-qa-db-ja.com

ClickOnceなしでアプリケーションを自動的に更新する方法は?

私が取り組んでいるプロジェクトでは、 ClickOnce を使用できません。私の上司は、プログラムが(インストーラーなどを使用して)「本物」に見えることを望んでいます。

Visual Studio 2012 Professionalをインストールし、 InstallShield インストーラーをいじくり回しました。これは間違いなくNiceインストーラーになりますが、有効にする方法がわかりませんアプリケーションを「自動更新」します(つまり、起動時に、最新バージョンを使用していることを確認します)。

私はコードに小さな変更を加えるように頼まれました-減算に加算を切り替えます、そして私は本当に人々が古いバージョンをアンインストールする必要はなく、小さなバージョンを作るたびに新しいバージョンを再インストールする必要はありませんこのように変更します。

アプリケーションで更新プログラムをチェックしてインストールする方法を教えてください。それとも不可能ですか(簡単ではありませんか)?

28
Toadums

これについてはすでに多くの質問がありますので、それらをご紹介します。

アンインストールの必要性を確実に防止したいことの1つは、すべてのリリースで同じupgradeコードを使用するが、productコード。これらの値は、Installshieldプロジェクトプロパティにあります。

いくつかの参照:

21
JYelton

Codeplex.comで次のプロジェクトを確認する必要があると思います http://autoupdater.codeplex.com/

このサンプルアプリケーションは、プロジェクト名「AutoUpdater」を持つライブラリとしてC#で開発されています。 DLL“ AutoUpdater”は、C#Windowsアプリケーション(WinFormおよびWPF)で使用できます。

AutoUpdaterには特定の機能があります。

  1. 実装と使用が簡単。
  2. 更新を確認した後、アプリケーションが自動的に再実行されます。
  3. ユーザーに透過的な更新プロセス。
  4. マルチスレッドダウンロードを使用してメインスレッドのブロックを回避するため。
  5. システムと自動更新プログラムをアップグレードする機能。
  6. さまざまなシステムで使用するときに変更する必要がなく、ライブラリでコンパイルできるコード。
  7. ユーザーが更新ファイルをダウンロードするのは簡単です。

使い方?

自動更新可能にするプログラムでは、メインプロシージャでAutoUpdate関数を呼び出すだけです。 AutoUpdate機能は、Webサイト/ FTPにあるファイルから読み取られたバージョンとバージョンをチェックします。プログラムのバージョンが読み込んだものよりも低い場合、プログラムは自動更新プログラムをダウンロードして起動し、関数はTrueを返します。これは、自動更新が実行され、現在のプログラムが閉じられることを意味します。自動更新プログラムは、更新するプログラムからいくつかのパラメーターを受け取り、必要な自動更新を実行してから、更新されたシステムを起動します。

  #region check and download new version program
  bool bHasError = false;
  IAutoUpdater autoUpdater = new AutoUpdater();
  try
  {
      autoUpdater.Update();
  }
  catch (WebException exp)
  {
      MessageBox.Show("Can not find the specified resource");
      bHasError = true;
  }
  catch (XmlException exp)
  {
      bHasError = true;
      MessageBox.Show("Download the upgrade file error");
  }
  catch (NotSupportedException exp)
  {
      bHasError = true;
      MessageBox.Show("Upgrade address configuration error");
  }
  catch (ArgumentException exp)
  {
      bHasError = true;
      MessageBox.Show("Download the upgrade file error");
  }
  catch (Exception exp)
  {
      bHasError = true;
      MessageBox.Show("An error occurred during the upgrade process");
  }
  finally
  {
      if (bHasError == true)
      {
          try
          {
              autoUpdater.RollBack();
          }
          catch (Exception)
          {
             //Log the message to your file or database
          }
      }
  }
  #endregion
5
Anas Naguib

最も一般的な方法は、最後のビルドバージョンのWebサーバーに単純なテキストファイル(XML/JSONの方が良い)を配置することです。アプリケーションはこのファイルをダウンロードし、バージョンを確認してアップデーターを起動します。典型的なファイルは次のようになります。

アプリケーション更新ファイル//アプリケーションにファイルタイプを認識させる一意の文字列

バージョン:1.0.0//最新のアセンブリバージョン

ダウンロード: http://yourserver.com/ ...//ダウンロードバージョンへのリンク

リダイレクト: http://yournewserver.com/ ...//サーバーアドレスが変更された場合にこのフィールドを使用しました。これにより、クライアントは新しいアドレスを確認する必要があることを知ることができます。

他の重要な詳細を追加することもできます。

2
Samy Arous

レイの男性の方法は

main()で、実行中のアセンブリファイル.exeの名前を他のものに変更し、作成日時を確認します。更新されたファイルの日付と時刻をアプリケーションフォルダーにコピーします。

//Rename he executing file
System.IO.FileInfo file = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);

System.IO.File.Move(file.FullName, file.DirectoryName + "\\" + file.Name.Replace(file.Extension,"") + "-1" + file.Extension);

次に、ロジックチェックを実行し、新しいファイルを実行フォルダーにコピーします

1
Muffaddal Kalla

これは、ファイルを更新するがインストールはしないコードです。このプログラムは、ファイルを最新の日付にコピーし、プログラムを自動的に実行するためのdosによって作成されます。あなたを助けるかもしれません

メモ帳を開き、以下のファイルをext .batで保存します

xcopy \\IP address\folder_share_name\*.* /s /y /d /q  
start "label" /b "youraplicationname.exe"
1
RAMTY