管理者から、インストール後にアプリケーションでシステムのシステムの復元を無効にする必要があるという要件があります。これを実現するために、以下のコードを見つけて実装しました。コードはXPとVistaで問題なく動作しますが、Win7では同じようには動作していないようです。
public void disableSystemRestore(string drive)
{
try
{
ManagementScope scope = new ManagementScope("\\\\localhost\\root\\default");
ManagementPath path = new ManagementPath("SystemRestore");
ObjectGetOptions options = new ObjectGetOptions();
ManagementClass process = new ManagementClass(scope, path, options);
ManagementBaseObject inParams = process.GetMethodParameters("Disable");
inParams["Drive"] = drive;
ManagementBaseObject outParams = process.InvokeMethod("Disable", inParams, null);
}
catch(ManagementException err)
{
MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message);
}
}
問題は、Win7ではシステムの復元がシステム保護にラップされていることです。システム保護には、ハードドライブごとに3つのオプションがあります。
1)システムの復元とファイルバージョン
2)ファイルバージョンのみ
3)なし
この設定を手動で変更したことがない限り、コードは問題なく機能します。ただし、ユーザーが以前にこの設定を変更した場合、コードはOption3ではなくOption2を設定します。どうすればこれを修正できますか?
さらに、Option2が正確に何をするのかについての適切な説明を見つけることができません。これで実際にカバーされているファイルについてさまざまな説明を見てきましたが、あちこちのスレッドについてコメントしているだけです。それが何をするのか、それがどのように機能するのかについての本当の「良い」説明はありません。
編集:私がこれを行う必要がある「なぜ」について多くの懸念があり、私は完全に理解し、別の方法を見つけるために戦ったと信じています。しかし、それは実現可能ではありませんでした。うまくいけばあなたの心を安心させるためのいくつかのより多くの情報。
この製品は個人使用を目的としたものではありません。これは、ロックダウンされたシステムで企業レベルで使用されます。この要件は、業界の規制と標準に基づいています。医療カードやクレジットカードを考えてみてください。保護されているのは、「私たちの」ログ、システムアクセスログ、システム使用ログ、ファイル監査ログだけではありません。したがって、システムの復元が無効になっている場合でも、他の手段を使用して古いバージョンのログを復元できますが、システムレベルのログにはファイルアクセスとアクセス者が記録されるため、少なくともログの改ざんが発生したことがわかります。基本的に、OSを使用してログを監査ログに記録します。復元ポイントは、1つの簡単なステップでそれらすべてをリセットします。
このアプリを管理者権限でインストールすることは、ユーザーに課せられた要件です。現在、サイトが業界認定を維持できるように、ユーザーは実際にこの手順を手動で実行する必要があります。インストールプロセスを単純化しようとしているだけです。サイト管理者はこの要件を認識しています。インストールプロセスを簡素化するために私が実装しているこのような「システム管理者」の変更は他にもたくさんあります。