كيفية اختيار بنية المعالج لتثبيت MSI مع Delphi
-
27-09-2019 - |
سؤال
أخبار جيدة: إصدار رئيسي في الحقيبة!
الأخبار السيئة: لقد اكتشفت للتو (أسبوعين بعد فوات الأوان) أن بعض الأشخاص لا يملكون MSXML 6 على أجهزتهم والمثبت الجديد الذي نطرحه يتطلب ذلك.
أخبار سارة: يمكننا توزيع ملف MSI لتثبيت MSXML
الأخبار السيئة: هناك ثلاثة ملفات MSI للاختيار من بينها ، واحد "عادي" ، واحد ينتهي في IA64 وواحد ينتهي في X64.
لديّ ملفات من Delphi 7 و C ++ و UM ... ملفات الدُفعات ... كيف أقوم بعمل واحد من تلك الإعدادات المتسلسلة.
المحلول
إجابة قصيرة: استخدم GetSystemInfo
وظيفة واجهة برمجة تطبيقات Windows لمعرفة ما إذا كان النظام 32 بت أو 64 بت.
رمز المثال:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var
si: TSystemInfo;
const
PROCESSOR_ARCHITECTURE_AMD64 = 9;
PROCESSOR_ARCHITECTURE_IA64 = 6;
PROCESSOR_ARCHITECTURE_INTEL = 0;
PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;
begin
GetSystemInfo(si);
case si.wProcessorArchitecture of
PROCESSOR_ARCHITECTURE_AMD64: Writeln('AMD64');
PROCESSOR_ARCHITECTURE_IA64: Writeln('IA64');
PROCESSOR_ARCHITECTURE_INTEL: Writeln('Intel');
PROCESSOR_ARCHITECTURE_UNKNOWN: Writeln('Unknown');
end;
Readln;
end.
المخرجان الأكثر شيوعًا هما "Intel" (32 بت X86) و "AMD64" (64 بت X64). في الواقع ، يمكنك الثقة أكثر أو أقل من أنك ستحصل على واحدة من هؤلاء.
الآن ، في الواقع ، أعتقد أن البرنامج أعلاه سوف دائماً إرجاع "Intel" (32 بت x86) لأن جميع تطبيقات Delphi 32 بت ، وبالتالي يتم محاكاةها تحت نوافذ 64 بت (باستخدام WOW64)-لا يوجد إصدار 64 بت من برنامج ترجمة Delphi و IDE.
حتى للحصول على حقيقي بنية النظام ، بغض النظر عن المحاكاة ، عليك استخدام GetNativeSystemInfo
وظيفة. لا يوجد غلاف لهذه الوظيفة ، لذلك عليك استيرادها بنفسك من kernel32.dll.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var
si: TSystemInfo;
const
PROCESSOR_ARCHITECTURE_AMD64 = 9;
PROCESSOR_ARCHITECTURE_IA64 = 6;
PROCESSOR_ARCHITECTURE_INTEL = 0;
PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;
procedure GetNativeSystemInfo(var lpSystemInfo: TSystemInfo); stdcall; external kernel32 name 'GetNativeSystemInfo';
begin
GetNativeSystemInfo(si);
case si.wProcessorArchitecture of
PROCESSOR_ARCHITECTURE_AMD64: Writeln('AMD64');
PROCESSOR_ARCHITECTURE_IA64: Writeln('IA64');
PROCESSOR_ARCHITECTURE_INTEL: Writeln('Intel');
PROCESSOR_ARCHITECTURE_UNKNOWN: Writeln('Unknown');
end;
Readln;
end.
نصائح أخرى
يمكنك أن تنسى IA64 وهو أنظمة itanium. كنت أستخدم أداة لإنشاء إعداد (هناك أجهزة مجانية ممتازة ، مثل InnoSetup). سوف يكتشفون أي نوع من النظام الذي يعمل عليه الإعداد ، ويتيح لك تشغيل المثبت المناسب لـ MSXML. إذا كانت الأداة تدعم محرك تثبيت Windows مباشرة ، فيمكنها الاستفادة من وحدات الدمج (MSM) لتوزيع أوقات التشغيل المطلوبة ، وإلا من السهل جدًا تشغيل MSI من المثبت. يمكنك أيضًا كتابة المثبت الخاص بك ، لكنك تحصل على تطبيق آخر للكتابة والاختبار و Mantain. سأستفيد من تلك الموجودة لمثل هذه المهمة.