ملاحظة أساسية:
منذ بعض الوقت، قمت بتطوير نظام تحويل البيانات. ينص منطق العمل على ضرورة ضغط البيانات بتنسيق .tar.gz.
أستخدمه في نظام Windows أولاً، قم بإنشاء ملف دفعي، ثم اتصل بـ WinExec لتنفيذ الملف الدفعي، وانتظر لفترة من الوقت، وأكمل الضغط التلقائي للبيانات.
لاحقًا، تم اكتشاف أن حجم الملف المراد ضغطه غير مؤكد، وأن مجرد النوم لفترة محددة عند تنفيذ WinExec قد يتسبب في فشل الضغط، أو ملفات غير مكتملة أو تالفة.
خطة التحسين:
بدلاً من WinExe، استخدم CreateProcess لبدء العملية وتنفيذ الملف الدفعي. وفي الوقت نفسه، سيقوم النظام تلقائيًا بملء بنية TProcessInformation.
في هذا الوقت، سيقوم البرنامج تلقائيًا بحظر الدُفعة، في انتظار انتهاء عملية مقبض الدُفعة أو انتهاء المهلة. سيؤدي هذا إلى حل مشكلة تلف الضغط.
أعط مثالاً تجريبيًا:
رمز D7 هو كما يلي:
وحدة uMain؛ واجهات Windows، الرسائل، SysUtils، المتغيرات، الفئات، الرسومات، عناصر التحكم، النماذج، مربعات الحوار، RzButton، StdCtrls؛ type TFrmMain = class(TForm) mmMsg: TMemo; btnExecute: TRzBitBtn; سلسلة)؛ الإجراء btnExecuteClick(Sender: TObject); الإجراء btnClearClick(Sender: TObject); public { الإعلانات العامة } end;var FrmMain: TFrmMain;implementation{$R *.dfm} الإجراء TFrmMain.MsgDsp(v_Str: string); ابدأ mmMsg.Lines.Add('[ admin ] - [' + v_Str + '] - [' + FormatDateTime('YYYY-MM-DD hh:mm:ss zzz', Now()) + ']');end;إجراء TFrmMain.btnExecuteClick(Sender: TObject);var sInfo: TStartupInfo ; MsgDsp('معلمات التهيئة'); cmdLine := 'C:/Program Files/7-Zip/7zFM.exe'; sInfo.dwFlags := STARTF_USESHOWWINDOW; sInfo.wShowWindow := SW_NORMAL; MsgDsp('اكتملت تهيئة المعلمة، ابدأ تصحيح أخطاء WinExec'); // يتم استخدام CreateProcess لبدء العملية، سيتم ملء بنية TProcessInformation. // في هذا الوقت، يتم حظر البرنامج في مقبض، في انتظار نهاية عملية المقبض أو المهلة إن لم يكن CreateProcess(nil, pchar(cmdLine), nil, nil, false, CREATE_NEW_CONSOLE أو NORMAL_PRIORITY_CLASS, nil, nil, sInfo, pInfo) ثم ابدأ MsgDsp('فشل تصحيح أخطاء WinExec! '); , INFINITE); GetExitCodeProcess( pInfo.hProcess,exitCode); TFrmMain.btnClearClick(Sender: TObject);begin mmMsg.Clear;end;end.
تأثير التشغيل هو كما يلي:
تلخيص
ما ورد أعلاه هو مقدمة المحرر حول استدعاء البرامج الخارجية لدلفي وحظر البرامج الخارجية، وآمل أن يكون ذلك مفيدًا لك. إذا كانت لديك أي أسئلة، فيرجى ترك رسالة لي وسيقوم المحرر بالرد عليك في الوقت المناسب. أود أيضًا أن أشكر الجميع على دعمكم لموقع Wulin.com!
إذا كنت تعتقد أن هذه المقالة مفيدة لك، فنحن نرحب بإعادة طبعها، يرجى الإشارة إلى المصدر، شكرًا لك!