System.Runtime.InteropServices.COMException при попытке создать точку восстановления системы с помощью C # - PullRequest
0 голосов
/ 05 декабря 2018

Я использую следующий код C # из этого сообщения stackoverflow .

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"] = "Setting restore point";
oInParams["RestorePointType"] = 12; // MODIFY_SETTINGS
oInParams["EventType"] = 100;

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

Ошибка исходит от строки, которая объявляет oOutParams.

Я обернул эту строку в try catch и распечатал код ошибки -2147023838, который я не могу найти ни в одном списке кодов ошибок COM, перечисленных здесь (при условии, что напечатанный код ошибки должен быть преобразован вшестнадцатеричное дополнение 2 -> 0x80070422).

Без перехвата исключения (в основном точного кода, приведенного выше) трассировка стека будет:

Unhandled Exception: System.Runtime.InteropServices.COMException
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options)
   at WindowsUpdatesDev.Program.Main(String[] args)

При использовании try / catch, обернутом вокруг строкикоторый объявляет oOutParams Я печатаю трассировку стека, которая:

at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options)                                                                                                           
at WindowsUpdatesDev.Program.Main(String[] args)

Нет сообщения для этой второй трассировки стека.

1 Ответ

0 голосов
/ 05 декабря 2018

Выполнение шагов здесь (в частности, всех шагов первого и второго, установив «Защита» в значение «Вкл.» Для моего диска C:) позволяет выполнить приведенный выше код без ошибок.

...