سؤال

أخبار جيدة: إصدار رئيسي في الحقيبة!

الأخبار السيئة: لقد اكتشفت للتو (أسبوعين بعد فوات الأوان) أن بعض الأشخاص لا يملكون 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. سأستفيد من تلك الموجودة لمثل هذه المهمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top