2008-08-28 36 views
3

以編程方式創建系統還原點是否「禁忌」?在執行軟件更新之前,我會這樣做。如果有更好的方法只用我的軟件的文件和數據創建還原點,請告訴我。創建系統還原點 - 思考?

我希望通過這種方式,我可以讓用戶回到已知的工作狀態,如果在更新期間所有內容都會更新(關閉/關閉更新應用程序,關閉電源,拔出插頭等)

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

是以編程方式創建系統還原點的「禁忌」嗎?

不。這就是爲什麼API在那裏;以便您可以對系統進行僞原子更新。

-1

我不認爲一個完整的系統恢復將是一個很好的計劃。有兩個原因,迅速浮現在腦海:

  • 磁盤空間的浪費,從回滾
2

  • 意想不到的後果不,這不是禁忌 - 事實上,我會鼓勵它。操作系統管理多少硬盤需要,我會把錢花在微軟花更多的錢&時間測試系統還原比你的錢&時間你正在測試你的設置應用程序。

  • 0

    看看下面的鏈接:http://www.calumgrant.net/atomic/

    筆者描述的「事務編程」。這與數據庫中的交易類似。

    實施例:

    開始事務:

    1. 步驟1
    2. 步驟2
    3. 遭遇錯誤步驟期間2
    4. 回滾到事務開始之前。

    這是一個新的框架,但您可以更多地將它看作解決方案,而不是使用框架。

    通過使用交易,您可以獲得您正在查找的「還原點」。

    1

    如果您正在開發適用於Vista,您可以使用事務NTFS,它支持類似的功能,你正在尋找一個應用程序。

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

    豈不安裝程序包已經包含了這種類型的回滾支持有關係嗎?我對他們中的大多數並不熟悉,所以我不確定。

    最後,Windows將自動通常你創建一個運行安裝應用程序還原點隨時隨地。

    3

    這是一個好主意還是不是真的取決於你在做多少。完整的系統還原點很重要 - 創建,存儲磁盤空間並將其添加到還原點界面需要時間,可能會將較早的還原點從存儲中移出。因此,如果你的更新確實只是改變你的你的應用程序(即它存儲的數據,構成它的二進制文件,它的註冊表項),那麼它不是一個真正的系統級更改, d投票表示沒有還原點。您可以通過備份正在更改的部分來模擬功能,並提供還原到備份選項。我的意見是,系統還原應該是在全局更改可能會破壞它(應用程序安裝等)時恢復系統。

    一個人應該只是使用系統服務的反說法並不適合我;我擔心,如果您必須嚮應用程序發出大量更新,系統還原點集可能變得非常大,以至於重要的真正「系統範圍」更新可能會被推出或丟失。