kullanarak, Windows 2012 Server üzerinde BCDStore bilgi okunamıyor. Bu numara sadece kayıt için kullanılır.Biz şimdiki önyükleme yapılandırma tarafından belirlenen işlemci sayısını almak için aşağıdaki işlevi kullanırken WMI
işlevi aşağıda Ancak, Windows 2012 Server üzerinde başarısız, XP, Vista, 7, 2003 ve 2008. It üzerinde çalışıyor.
// -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;
Ben Win2012 üzerinde çalıştırmak denerseniz
,objWBL.GetElement
metin
OLE error D0000225
ile
EOleSysError
durum oluşturur. Google, bu hata kodu :(
Yığın izleme istisna VarDispInvoke tarafından çağrılan DispatchInvoke tarafından çağrılan System.Win.ComObj.DispatchInvokeError tetiklenir söylüyor.
ile ilgili anlamlı bir şey bulamazsabu XE2'de kullanılarak yeniden edildi Tümü. Ben XE3 ile sorunu tekrarlamak istiyorum, ancak ben Delphi RTL onunla ilgisi inanmıyorum.
kimse bu davranışın olası nedenleri hakkında bir fikrin var mı?
Güncelle 4 düzeltmeyi 1 var mı? –
Evet, sahip olmalıydım. İki kere kontrol edeceğim. (Exe, * U4H1'in kurulu olması gereken yapı sunucusunda oluşturuldu.) – gabr
UAC açık veya kapalı? Süreç yükselmiş mi, yükseltilmemiş mi? –