4

システムの復元ポイントをプログラムで作成することは「タブー」ですか? ソフトウェアの更新を実行する前にこれを行います。ソフトウェアのファイルとデータだけで復元ポイントを作成するより良い方法があれば、お知らせください。

更新中にすべてが失敗した場合(更新アプリを閉じる/強制終了する、電源が切れる、ユーザーがプラグを抜くなど)、ユーザーを既知の動作状態に戻すことができる手段が欲しい.

    private void CreateRestorePoint(string description)
    {
        ManagementScope oScope = new ManagementScope("\\\\localhost\\root\\default");
        ManagementPath oPath = new ManagementPath("SystemRestore");
        ObjectGetOptions oGetOp = new ObjectGetOptions();
        ManagementClass oProcess = new ManagementClass(oScope, oPath, oGetOp);

        ManagementBaseObject oInParams = oProcess.GetMethodParameters("CreateRestorePoint");
        oInParams["Description"] = description;
        oInParams["RestorePointType"] = 12; // MODIFY_SETTINGS
        oInParams["EventType"] = 100;

        ManagementBaseObject oOutParams = oProcess.InvokeMethod("CreateRestorePoint", oInParams, null); 
    }
4

6 に答える 6

4

システムの復元ポイントをプログラムで作成することは「タブー」ですか?

いいえ、それが API がある理由です。システムの疑似アトミック更新を行うことができます。

于 2008-08-28T18:19:49.850 に答える
3

それが良いアイデアかどうかは、あなたがどれだけやっているのかにかかっています。システム全体の復元ポイントは非常に重く、作成に時間がかかり、保存するディスク容量がかかり、復元ポイントのインターフェイスに追加されるため、以前の復元ポイントがストレージから押し出される可能性があります。

したがって、更新が実際にアプリケーションを変更するだけである場合(つまり、アプリケーションが保存するデータ、アプリケーションを構成するバイナリ、アプリケーションのレジストリ エントリ)、それは実際にはシステム レベルの変更ではなく、復元ポイントなしに投票します。 . 変更している部分をバックアップするだけで機能をエミュレートし、バックアップ オプションへの復元を提供できます。私の意見では、システムの復元は、システムを破損する可能性のあるグローバルな変更 (アプリケーションのインストールなど) が行われたときにシステムを復元する必要があるというものです。

システムサービスを使用するだけでよいという反論は、私には筋が通っていません。アプリケーションに多数の更新を発行する必要がある場合、システムの復元ポイントのセットが非常に大きくなり、重要な実際の「システム全体」の更新が押し出されたり、ノイズの中で失われたりするのではないかと心配しています。

于 2008-08-28T18:18:13.877 に答える
2

いいえ、それはタブーではありません。実際、私はそれを奨励します。OSはハードドライブの使用量を管理します。セットアップアプリケーションのテストに費やすお金と時間よりも、Microsoftがシステムの復元のテストに多くのお金と時間を費やすことにお金をかけます.

于 2008-08-28T17:34:40.753 に答える
1

Vista 用のアプリケーションを開発している場合は、探しているものと同様の機能をサポートするトランザクション NTFS を使用できます。

http://en.wikipedia.org/wiki/Transactional_NTFS

ただし、インストーラー パッケージには、このタイプのロールバック サポートが既に含まれているのではないでしょうか? 私はそれらのほとんどにひどく精通していないので、よくわかりません。

最後に、Windows は通常、セットアップ アプリケーションを実行するたびに復元ポイントを自動的に作成します。

于 2008-08-28T18:00:02.937 に答える
0

次のリンクをご覧ください: http://www.calumgrant.net/atomic/

著者は「トランザクション プログラミング」について説明しました。これは、データベースでのトランザクションに似ています。

例:

取引開始:

  1. ステップ1
  2. ステップ2
  3. ステップ 2 でエラーが発生しました
  4. トランザクション開始前にロールバックします。

これは新しいフレームワークですが、フレームワークを使用するというよりも、ソリューションとして見ることができます。

トランザクションを使用することで、あなたが探している「復元ポイント」を取得できます。

于 2008-08-28T17:46:58.820 に答える
-1

完全なシステムの復元は良い計画ではないと思います。すぐに思いつく 2 つの理由:

  • 無駄なディスク容量
  • ロールバックによる意図しない結果
于 2008-08-28T17:22:18.350 に答える