الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عجزت عن تنفيذ دالة CreateProcess

مغلق
بدأه fafe0 في 28 يناير 2006 · 8 رد · 1,139 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بالأمس حاولت كثيراً من أجل تشغيل برنامج باستخدم هذه الدالة، ولكني لم أنجح، في البداية أخطأت في وضع نوع القيمة المرتجعة من الدالة، ووضعت قيمة من النوع Thandle، وبعد مراجعة الهلب، وجدت أنها من النوع BOOL، وبعد تعديلها تم تجميع البرنامج بنجاح، ولكن لم يتم تشغيل البرنامج المطلوب في الدالة !!!

وضعت مسار البرنامج المطلوب في أول محدّد، ووضعت كل المحددات الأخرى( وهي 9 محددات ) على حسب الاختيارات الموجودة في ملف المساعدة، ولكن لم تعمل معي !

أرجو من أحد الإخوة وضع كود سريع لهذه الدالة، ويكون مجرب وشغال.

ومشكورين مقدماً

السلام عليكم.

#2

كان من الأفضل ان تضع الكود الذي جربته ليخبرك من له دراية بالخطأ فيه

جرب هذا مثلا

var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
....
  ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  StartInfo.cb := SizeOf(TStartupInfo);
  CreateProcess(nil, 'notepad.exe', nil, nil, False, 0,
                nil, nil, StartInfo, ProcInfo);

ايضا وضع المسار الصحيح للبرنامج المراد تشغيله كأول عنصر يفي بالغرض

يفضل أن تقوم بوضع الكود الذي اجريت التجربة عليه ....

تم تعديل هذه المشاركة بواسطة cipher في 28 يناير 2006 في 14:27

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#3

نعم أخي cipher كان من الأفضل وضع الكود،

ولكن أنا الآن مستعجل، ولم استخدم هذه الدالة من قبل، والكود ليس عندي حالياً، والآن لا أذكر أنواع البيانات لكل محدد حتى أكتبها في الكود،

وشكراً على الإجابة.

والكود الذي وضعته يشتغل 100 %

بارك الله فيك..

السلام عليكم.

#4

هذا هو الكود الذي كتبته المرة الماضية، أعدت كتابته حتى أعرضه عليكم وأعرف ما المشكلة

var
 StartInfo: _STARTUPINFOA;
 ProcInfo: PROCESS_INFORMATION;
begin
 CreateProcess('C:\file.zip', nil, nil, nil, False, 0,
              nil, nil, StartInfo, ProcInfo);
end;

هذا هو الكود الذي أجريت التجربة عليه أخي cipher بالتمام، بالأمس وضعت مسار الملف المراد تشغيله كأول محدد - كما ذكرت لكم سابقاً وكما أخبرتني أنت أيضاً في ردك (

اقتباس
ايضا وضع المسار الصحيح للبرنامج المراد تشغيله كأول عنصر يفي بالغرض
)

ولكن الكود لا يعمل، إذا كان مسار الملف هو أول محدد !

ملاحظة: حتى بعد إضافة دالة ZeroMemory ، وتحدد حجم الحقل cb في السجل أو البناء TStartUpInfo و تغيير نوع البيانات إلى النوعية التي ذكرتها ( Tstartupinfo و TProcessinformation ) - كما وضعتهم أنت - لن يعمل البرنامج !

فهل هناك حاجة إلى تعديل ثاني باراميتر ؟ في الهلب مكتوب أنه :

اقتباس
lpCommandLine

Pointer to a null-terminated string that specifies the command line to execute.

The lpCommandLine parameter can be NULL. In that case, the function uses the string pointed to by lpApplicationName as the command line.

بس أنا وضعت القيمة nil فهل هناك خطأ في الفهم هنا ؟

هل عندكم أي ملاحظات ؟؟

وبارك الله فيكم مقدماً.

تم تعديل هذه المشاركة بواسطة fafe0 في 28 يناير 2006 في 15:37

#5

السلام عليكم

أنا اكتشفت أين المشكلة

دالة CreateProcess لا تشغل إلا الملفات التنفيذية، يعني لازم يكون امتداد الملف المطلوب تشغيله exe أو غيرها من الامتدادات التنفيذية.

#6

:)

عذراً لم أنتبه أنك وضعت رد بتاريخ Jan 28 2006, 03:15 PM ...

شئ جيد أنك أدركت أين كان الخطأ ... وهو فعلاً كما ذكرت وستلحظ ذلك في اول سطر من تعريف الدالة

اقتباس
The new process executes the specified executable file.

بالنسبة لـ 'C:\file.zip' فبامكانك اعتباره جزء من الـ "lpCommandLine" لبرنامج يستطيع التعامل مع هذا النوع من الملفات و له commandline يحتوي اسم الملف المراد فك ضغطه... (مثلاً winrar )..

ملحوظة بسيطة على اخر رد لك :

اقتباس
دالة CreateProcess لا تشغل إلا الملفات التنفيذية،

أنت محق هنا لكن ...إستخدام لفظ Executable module افضل من ملف تنفيذي

اقتباس
يعني لازم يكون امتداد الملف المطلوب تشغيله exe أو غيرها من الامتدادات التنفيذية.

ليس بالضرورة... فالمسألة لا تعتمد على امتداد الملف بصورة أساسية على الاقل في الانظمة NT Family ...

ما أعنيه : جرب وضع نسخة من notepad.exe باسم notepad.aaa ثم استدعي الدالة CreateProcess ولاحظ النتيجة ...

أعلم أنك تدرك هذا الشئ لكن وددت كتابة ما سبق حتى لا تتكون فكرة خاطئة لدى البعض ...

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#7

جزاك الله خيراً أخي سيفر، بالفعل استفدت من المعلومات التي ذكرتها، - ينقصني شيء من التركيز في قراءة الهلب :) -

بالنسبة لـ :

اقتباس
بالنسبة لـ 'C:\file.zip' فبامكانك اعتباره جزء من الـ "lpCommandLine" لبرنامج يستطيع التعامل مع هذا النوع من الملفات و له commandline يحتوي اسم الملف المراد فك ضغطه... (مثلاً winrar )..

أخي سيفر، هل هناك أمر معين أكتبه في الدوس لبرنامج WinRar، مع إعطاء اسم الملف كبارميتر ( 'C:\file.zip ')، فيقوم بفك ضغط الملف ؟

#8

حاول الإطلاع على الـ command line لـ unrar

UNRAR 3.51 freeware      Copyright (c) 1993-2005 Alexander Roshal

Usage:     unrar <command> -<switch 1> -<switch N> <archive> <files...>
               <@listfiles...> <path_to_extract\>

<Commands>
  e             Extract files to current directory
  l[t,b]        List archive [technical, bare]
  p             Print file to stdout
  t             Test archive files
  v[t,b]        Verbosely list archive [technical,bare]
  x             Extract files with full path

<Switches>
  -             Stop switches scanning
  ac            Clear Archive attribute after compression or extraction
  ad            Append archive name to destination path
  ap<path>      Set path inside archive
  av-           Disable authenticity verification check
  c-            Disable comments show
  cfg-          Disable read configuration
  cl            Convert names to lower case
  cu            Convert names to upper case
  dh            Open shared files
  ep            Exclude paths from names
  ep3           Expand paths to full including the drive letter
  f             Freshen files
  id[c,d,p,q]   Disable messages
  ierr          Send all messages to stderr
  inul          Disable all messages
  ioff          Turn PC off after completing an operation
  kb            Keep broken extracted files
  n<file>       Include only specified file
  n@            Read file names to include from stdin
  n@<list>      Include files in specified list file
  o+            Overwrite existing files
  o-            Do not overwrite existing files
  oc            Set NTFS Compressed attribute
  ow            Save or restore file owner and group
  p[password]   Set password
  p-            Do not query password
  r             Recurse subdirectories
  ri<P>[:<S>]   Set priority (0-default,1-min..15-max) and sleep time in m
  ta<date>      Process files modified after <date> in YYYYMMDDHHMMSS form
  tb<date>      Process files modified before <date> in YYYYMMDDHHMMSS for
  tn<time>      Process files newer than <time>
  to<time>      Process files older than <time>
  ts<m,c,a>[N]  Save or restore file time (modification, creation, access)
  u             Update files
  v             List all volumes
  ver[n]        File version control
  vp            Pause before each volume
  x<file>       Exclude specified file
  x@            Read file names to exclude from stdin
  x@<list>      Exclude files in specified list file
  y             Assume Yes on all queries

طبعا لا بد من ادخال المسار الكامل لـ unrar .

بالامكان ادخال اسم الملف فقط باستخدام الطريقة المكتوبة هنا

http://www.respower.com/page_tutorial_unrar

وهي باستخدام set path ...

بحث في google عن winrar command line سيفيدك كثيراً

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#9

جزاك الله خيراً أخي cipher ما تقصر والله،

وفقك الله

هذا الموضوع مغلق.

مواضيع مشابهة