共用方式為


Srdelayed.exe

在作業系統啟動初期執行系統狀態還原作業的應用程式可能無法使用檔案管理功能來移動、刪除或設定特定系統檔案的簡短名稱。 Srdelayed.exe是 Windows Server 2008 中 Windows Server Backup (WSB) 功能的可執行檔,可讓系統狀態復原應用程式移動、刪除及設定系統檔案的簡短名稱。

Srdelayed 工具適用於系統狀態復原應用程式;它不會取代檔案管理功能。 只有當應用程式無法使用 MoveFileExDeleteFileSetFileShortName 函式來移動、刪除或設定系統檔案的簡短名稱時,才應該使用此工具。 在系統狀態還原和重新啟動期間,系統還原和wbadmin.exe命令行工具會使用Srdelayed.exe來移動、刪除及設定特定系統檔案的簡短名稱。 因此,Srdelayed 對於需要在自己的系統狀態復原應用程式中還原這些系統檔案的開發人員而言可能很有用。

Srdelayed 可以執行下列作業:

若要使用 Srdelayed,您的應用程式需要Srdelayed.exe檔案位置的完整路徑,以及您撰寫的 Unicode 文字檔案的完整路徑,以包含工具必須執行要求的所有檔案管理作業的資訊。 您的應用程式負責確保此文本檔不包含作業的備援要求,而且會處理檔案管理作業的任何必要順序。 例如,因為資料夾必須空白才能刪除,您的應用程式必須確定文本檔會指定移除資料夾內的所有檔案,才能要求刪除資料夾。

如果登錄中還沒有 SetupExecute 專案,您的應用程式必須在下列登錄機碼下建立名為 SetupExecute 的REG_MULTI_SZ類型專案:HKEY_LOCAL_MACHINE\System\CurrentControlSet\控制\工作階段管理員。

您的應用程式應該使用下列格式,將 SetupExecute 的值設定為Srdelayed.exe檔案位置的完整路徑,以及文本檔案位置的完整路徑。 前置詞 “\??\“ 文字文件的路徑,如下所示:

Srdelayed.exe \\??\文本檔的完整路徑

例如,SetupExecute 的下列值表示Srdelayed.exe位於 System32 資料夾中,而文本檔名為 DelayedOperations:

C:\Windows\System32\srdelayed.exe \\??\C:\temp\DelayedOperations

路徑和名稱中的空格應該以十六進位編碼。 例如,針對 Program Files,請將路徑編碼為 “\??\C:Program%20Files\a.dll”。

重新啟動時還原登錄或系統時,您的應用程式必須確定 SetupExecute 會在正確的登錄區中寫入。 在執行Srdelayed.exe之前,會先復原登錄。 應用程式必須將 SetupExecute 寫入已復原的登錄版本,因為這是讀取的版本。

Srdelayed 輸入檔的格式

Srdelayed 執行檔案管理作業所需的所有資訊都會指定為 Unicode 文字檔中的 Unicode 字元字串。 Unicode 字元的字串會分割成每個分割成四個字段的記錄。 每個記錄都會指定單一移動檔案、刪除檔案或設定簡短名稱作業。 每個記錄的四個字段包含作業的參數。 Srdelayed.exe會依記錄在字串中出現的順序執行每個作業。 您的應用程式應該檢查此檔案中是否有任何重複的記錄,並移除重複專案。

下列字串說明要求兩個作業且包含兩筆記錄之檔案的格式。 每個參數位段的結尾都是單一 L'\0' 字元。 記錄是由四個連續欄位所組成。 額外的單一 L'\0' 字元會附加至所有記錄的結尾。

<ParamA1>L'\0'<ParamA2>L'\0'<ParamA3>L'\0'<ParamA4>L'\0'<ParamB1>L'\0'<ParamB2>L'\0'<ParamB3>L'\0'<ParamB4>L'\0'L'\0'
|-----------------------RecordA------------------------|------------------------RecordB------------------------|

第一個、第二個、第三個和第四個參數位段的意義取決於記錄描述移動、刪除或設定簡短名稱作業。

移動檔案記錄的格式

欄位 1 將此識別為行動檔案的要求。 此欄位中的值一律為 L“MoveFile”,且區分大小寫。

欄位 2 指定檔案的來源位置。 Srdelayed 移動檔案作業不支援行動資料夾。 此欄位中必須指定檔案。 此欄位的值是附加至 「\??除非路徑包含全域唯一標識碼 (GUID),否則會使用 “\\?\” 做為前置詞。 將 \\?\“ 附加至 ”\??\".

欄位 3 指定檔案的目的地。 移動檔案作業只能在磁碟區內運作。 來源和目的地必須位於相同的磁碟區上。 此欄位的值是附加至 「\??除非路徑包含全域唯一標識碼 (GUID),否則會使用 “\\?\” 做為前置詞。 將 \\?\“ 附加至 ”\??\".

欄位 4 會從 Srdelayed 接收狀態資訊。 此欄位中的值應該設定為新記錄的 L“NotExecuted”

下列範例會依磁碟驅動器路徑參考檔案。 如果來源的路徑和名稱是 C:\Stage\a.dll,則此記錄會要求 Srdelayed 將其移至 C:\temp\a.dll。

MoveFile \\??\C:\Stage\a.dll \\??\C:\temp\a.dll NotExecuted

下列範例會依磁碟區 GUID 路徑參考檔案。 如果來源的路徑和名稱是 \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll 此記錄要求 Srdelayed 將其移至 \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\a.dll

MoveFile \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\a.dll NotExecuted

刪除檔案記錄的格式

欄位 1 將此識別為刪除檔案的要求。 此欄位中的值一律為 L“DeleteFile”,且區分大小寫。

欄位 2 未使用。 此欄位中的值應該設定為 L「未使用」。

欄位 3 指定要移除的檔案。 資料夾必須是空的,才能移除。 在移除資料夾之前,使用刪除檔案作業來移除資料夾中的所有檔案。 此欄位的值是附加至 「\??除非路徑包含全域唯一標識碼 (GUID),否則會使用 “\\?\” 做為前置詞。 將 \\?\“ 附加至 ”\??\".

欄位 4 會從 Srdelayed 接收狀態資訊。 此欄位中的值應該設定為新記錄的 L“NotExecuted”

下列範例會依磁碟驅動器路徑參考檔案。 如果路徑和名稱為 C:\temp\b.dll,此記錄會要求 Srdelayed 刪除檔案。

DeleteFile 未使用的 \\??\C:\temp\b.dll NotExecuted

下列範例會依磁碟區 GUID 參考檔案。 如果路徑和名稱為 \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll,此記錄會要求 Srdelayed 移除檔案。

DeleteFile 未使用的 \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll\ NotExecuted

設定簡短名稱記錄的格式

欄位 1 將此識別為設定檔案簡短名稱的要求。 此欄位中的值一律為 L“SetFileShortName”,且區分大小寫。

欄位 2 指定簡短名稱。

欄位 3 欄位會指定要接收簡短名稱的路徑和長名稱。 此欄位的值是附加至 「\\??除非路徑包含全域唯一標識碼 (GUID),否則會使用 “\\?\” 做為前置詞。 將 \\?\“ 附加至 ”\??\".

欄位 4 會從 Srdelayed 接收狀態資訊。 此欄位中的值應該設定為新記錄的 L“NotExecuted”

下列範例會依磁碟驅動器路徑參考檔案。 如果檔案的路徑和名稱是 C:\temp\ShortFileName.dll,此記錄會要求檔案收到簡短名稱,ShortN~1.dll。

SetFileShortName ShortN~1.dll \\??\C:\temp\ShortFileName.dll NotExecuted

下列範例會依磁碟區 GUID 參考檔案。 如果檔案的路徑和名稱是 \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\,則此記錄會要求檔案收到簡短名稱,ShortN~1.dll。

SetFileShortName ShortN~1.dll \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\ NotExecuted

Srdelayed 作業狀態

Srdelayed 會將字串 L“SC=xxxxxxx” 寫入文本檔的每個記錄的第四個字段,其中 xxxxxxx 是十六進位,表示所要求作業的狀態。 值為零表示作業成功。

Srdelayed 會在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion建立名為 SystemRestore 的登錄機碼,以記錄整個還原作業的結果。 如果 Srdelayed 執行所有成功的要求作業,則 Name RestoreStatusResult 會以零值寫入此機碼底下。 如果 Srdelayed 無法執行任何要求的作業,則會使用非零值在此機碼下寫入 RestoreStatusResult 和 RestoreStatusDetails 名稱。 只有在 Srdelayed 無法執行任何要求的作業時,RestoreStatusDetails 名稱才會寫入此機碼下。 如果設定檔案簡短名稱的作業失敗,Srdelayed 會繼續執行下一個作業。 Srdelayed 會將移動檔案和刪除檔案作業視為關鍵,如果移動或刪除作業失敗,則不會繼續。