10

ClickOnce配置でプロジェクトを配置したいと考えていました。しかし、そのようにすると、エンド ユーザー マシンのダイアログ ボックスで次のように尋ねられました。

XXXX の新しいバージョンが利用可能です。今すぐダウンロードしますか?

しかし、私のエンド ユーザーはマウスやキーボードを持っていません。したがって、私の意図は次のとおりです。更新を自動的に取得する必要がありますが、クライアント側でそのダイアログ ボックスを要求してはなりません。ClickOnce 配置を使用してこれを実現するにはどうすればよいですか?

4

6 に答える 6

12

ビルドのいくつかのプロパティを変更することでこれを行うことができるようです。

http://blog.jnericks.com/configuring-msbuild-to-auto-update-clickonce

  1. MinimumRequiredVersion - このアプリケーションを更新するときに、このバージョンに更新する必要があることを ClickOnce に伝えます (ただし、これによって ClickOnce に更新の実行が強制されるわけではありません)。ご覧のとおり、これを ApplicationVersion に設定されているのと同じバージョン番号に設定して、MinimumRequiredVersion が常に最新バージョンになるようにします。
  2. UpdateMode=Foreground - アプリケーションを開く前にアプリケーションを更新するように ClickOnce に指示します。
  3. UpdateRequired=True - 更新を自動的に実行するように ClickOnce に指示します。

MSBuild なしのシナリオ:

  1. プロジェクトを右クリックし、[プロパティ] を選択します
  2. 左下の「公開」タブに移動します
  3. [更新...] ボタンをクリックして、[アプリケーションの更新] ダイアログを開きます。
  4. 「アプリケーションはアップデートを確認する必要があります」にチェックを入れます
  5. 「アプリ起動前」を選択
  6. 「このアプリケーションに最低限必要なバージョンを指定する」にチェックを入れる
  7. 基礎となる [発行] ウィンドウに最小バージョンとして表示される発行バージョンを入力します。残念ながら、これは発行ごとに変更する必要があります。ただし、これを自動にする方法があるかもしれません。

次に、アプリケーションを公開してテストします。これは、ローカルのテスト アプリケーションで問題なく動作しました。

編集: 一部の人々は、更新に必要な最小限のバージョンを取得しているようです。ソリューションを調べたいと思うかもしれません。

編集 2: バージョン管理が重要な場所を示す画像:

最小バージョン

また、「公開ごとにリビジョンを自動的にインクリメントする」にチェックを入れていることに注意してください。プロジェクトの [プロパティ] に移動するたびに、そのバージョンが最新になります。通常、[アプリケーションの更新] ウィンドウでバージョンの [リビジョン] の部分を変更して、[発行] タブの [リビジョン] と一致させる必要があります。

于 2012-10-11T15:43:58.813 に答える
5

確かにできます!ネットワークに配置されたアプリケーションである限り、このコードを使用して更新を簡単に確認できます。下記参照:

Private Sub InstallUpdates()
    Dim info As UpdateCheckInfo = Nothing
    If (ApplicationDeployment.IsNetworkDeployed) Then
        Dim AD As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
        Try
            info = AD.CheckForDetailedUpdate()
        Catch dde As DeploymentDownloadException
            (You may want to log here)
            Return
        Catch ioe As InvalidOperationException
            (You may want to log here)
            Return
        End Try
        If (info.UpdateAvailable) Then
            Try
                AD.Update()
                Application.Restart()
            Catch dde As DeploymentDownloadException
                (You may want to log here)
                Return
            End Try
        End If
    End If
End Sub

このスニペットを入力して、スタートアップで呼び出すことができます。コンソール アプリケーション、Windows フォームアプリケーションで動作しますが、ネットワークに展開されている場合に限ります! ロギングに関する私のすべてのコメントが表示されている場所は、最初はプロンプト付きのメッセージ ボックスを使用していた場所ですが、これは入力を必要としないバージョンです!

于 2012-10-11T16:39:44.127 に答える
3

Gromer's answerに加えて、 AutoUpdateProjectsMinimumRequiredClickOnceVersion nuget パッケージをプロジェクトにインストールするだけです。更新をチェックし、最低限必要なバージョンを使用するようにプロジェクトを設定すると、最低限必要なバージョンが常に現在のバージョンと一致するように処理されます (つまり、ユーザーは常に最新バージョンに更新する必要があります)。

于 2016-12-18T23:32:24.273 に答える
1

.exe ファイルに基づくすべての ClickOnce アプリケーションは、カスタム インストーラーによってサイレント インストールおよび更新できます。カスタム インストーラーは、セキュリティおよびメンテナンス操作用のカスタム ダイアログ ボックスなど、インストール中にカスタム ユーザー エクスペリエンスを実装できます。インストール操作を実行するために、カスタム インストーラーはInPlaceHostingManagerクラスを使用します。

このソリューションを実装するには、このリンクを参照してください

于 2016-08-12T13:19:47.857 に答える
0

Ahmed の回答のフォローアップとして、以下は VB.NET のコードにマイナーな機能強化を加えたものです。ベスト プラクティスに従っていない可能性がありますが、読みやすく説明的です。

''' <summary>
''' Checks if the update is available for network based deployment and download it.
''' </summary>
''' <param name="autoDownloadUpdate">If the update is available, should it be downloaded automatically.<para>Default value is <code>True</code></para></param>
''' <returns>It will return <code>True</code> only if the latest version is already installed.
''' <para>If autoDownloadUpdate is set to <code>True</code>, the update is auto downloaded (and app restarts and nothing is returned) else it returns <code>False</code>.</para>
''' </returns>
Shared Private Function CheckAndDownloadUpdate(ByVal Optional autoDownloadUpdate As Boolean = True) As Boolean

    If ApplicationDeployment.IsNetworkDeployed = False Then Return False

    Dim appDeployment As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
    Dim info As UpdateCheckInfo = Nothing

    Try
        info = appDeployment.CheckForDetailedUpdate
    Catch ex As Exception
        ' Exceptions if you want to handle individually
        'DeploymentDownloadException ' No network connection
        'InvalidDeploymentException
        'InvalidOperationException
        Return False
    End Try

    ' If no update is available, it means latest version is installated
    If info.UpdateAvailable = False Then Return True

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    ' If we are here, it means an update is available on the network

    ' if autoDownload is False, simply return False 
    If autoDownloadUpdate = False Then Return False

    Try
        appDeployment.Update()
        Application.Restart()
        Environment.Exit(0)
    Catch ex As DeploymentDownloadException
        ' No network connection
        Return False
    End Try

End Function

その後、スタートアップ コードで、次のように呼び出すことができます

CheckAndDownloadUpdate()

回答をさらに強化するためのフィードバック...

于 2018-02-07T14:54:43.380 に答える