Chúng tôi đang sử dụng hàm sau để nhận số lượng bộ xử lý được chỉ định bởi cấu hình khởi động hiện tại. Con số này được sử dụng hoàn toàn cho việc đăng nhập.Không thể đọc thông tin BCDStore trên Windows 2012 Server bằng WMI
Chức năng dưới đây hoạt động tốt trên XP, Vista, 7, 2003 và 2008. Tuy nhiên, không thành công trên Windows 2012 Server.
// -1 = not implemented or not allowed
// 0 = not limited
// >0 = number of processors in the {current} boot entry
function Internal_GetBCDNumberOfProcessors: integer;
var
objBcdStore : OleVariant;
objElement : OleVariant;
objWBL : OleVariant;
objWMIService: OleVariant;
begin
// for more info, see: http://stackoverflow.com/questions/7517965/accessing-bcdstore-from-delphi/7527164#7527164
Result := -1;
try
objWMIService := GetObject('winmgmts:{(Backup,Restore)}\\.\root\wmi:BcdStore');
if (not VarIsNull(objWMIService)) and
boolean(objWMIService.OpenStore('', objBcdStore)) and
(not VarIsNull(objBcdStore)) and
boolean(objBcdStore.OpenObject('{fa926493-6f1c-4193-a414-58f0b2456d1e}', objWBL)) and
(not VarIsNull(objWBL))
then
if objWBL.GetElement($25000061, objElement) and //<-- fails here on Server 2012
(not VarIsNull(objElement))
then
Result := StrToIntDef(objElement.Integer, 0)
else
Result := 0;
except
on E: EOleSysError do
Result := -1;
end;
end;
Nếu tôi cố gắng chạy nó trên Win2012, các objWBL.GetElement
tăng EOleSysError
ngoại lệ với văn bản OLE error D0000225
. Google không tìm thấy bất cứ điều gì có ý nghĩa liên quan đến mã lỗi này :(
Stack trace nói rằng ngoại trừ được kích hoạt trong System.Win.ComObj.DispatchInvokeError mà được gọi bởi DispatchInvoke mà được gọi bởi VarDispInvoke.
Tất cả điều này đã được sao chép sử dụng XE2. tôi có thể cố gắng lặp lại các vấn đề với XE3 nhưng tôi không tin Delphi RTL có bất cứ điều gì để làm với nó.
Hiện ai có bất kỳ ý tưởng về lý do có thể cho hành vi này?
Bạn có Cập nhật 4 hotfix 1 không? –
Có, tôi nên có. Tôi sẽ kiểm tra lại. (Exe được xây dựng trên máy chủ xây dựng mà * nên * có cài đặt U4H1.) – gabr
UAC bật hoặc tắt? Quá trình nâng lên hoặc không nâng lên? –