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

احتاج مساعدة لكتابة مثود تعمل run لبرنامج exe

بدأه xma في 26 أكتوبر 2012 · 9 رد · 984 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

بعد البحث هنا وهناك وفي المنتديات الاجنبية لم اجد ماهو مطلوب

وهو كتابة مثود تقوم بعمل run لـ برنامج تطبيقي من نوع exe خارج البرنامج في نضام تشغيل وندوز 7

لاني اعرف ان وندوز xp لا توجد اي مشاكل لاني كنت استخدم هذه المثود

 //---------------------------------
  	public String xpath;
  	public void runExe(String path){
  		xpath = path;
  	System.out.println("runing exe now");
   Runtime r=Runtime.getRuntime();
   Process p=null;
   try
   {
    //   String "c:\\windows\\notpad.exe";
    //   String "notpad.exe";
     p=r.exec(xpath);
  }
   catch(Exception e){
     System.out.println("error==="+e.getMessage());
     e.printStackTrace();
   } 

  	}		   	
//-----------------------------------------------

هذه المثود لا تعمل في وندوز 7 لكن تعمل في وندوز xp من غير مشاكل لذالك احتاج مساعدة لعمل مثود تعمل في وندوز7 مع الشكر

#2

في العادة اقوم باستخدام ProcessBuilder عوضا عن الــ Runtime

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

يعطيك الف عافية اخي mental-driller لازالت المشكلة مثل ماهيه

	long[] args;
    public void runExe(){ 
	Process process = null;
	try {
		process = new ProcessBuilder("D:\\xxxx.exe").start();		
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	InputStream is = process.getInputStream();
	InputStreamReader isr = new InputStreamReader(is);
	BufferedReader br = new BufferedReader(isr);
	String line;


	System.out.printf("Output of running %s is:", Arrays.toString(args));

	try {
		while ((line = br.readLine()) != null) {
		  System.out.println(line);
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	

    }

شغال على الوندوز xp وغير شغال على الـ 7 المشكلة تتعلق في نضام الحماية في وندوز 7 المشكلة تدور حول حاجة في الـ 7 تتعلق بـ الصلاحيات المشكلة اني مش عارف اتعامل معاه كيف

لاحظ المسج

The requested operation requires elevation

ياريت حد يكون مجرب يساعدنا في الموضوع

تم تعديل هذه المشاركة بواسطة xma في 27 أكتوبر 2012 في 11:07

#4

نعم اتذكر باني واجهت نفس المشكله في السابق بسبب الصلاحيات اي انك بحاجه لاعطاء Privileges للمتسخدم الخاص بك حتى يعمل ملف الجار كانه Administrator اعتقد انه عليك كتابة ملف Mainfest او شيئ من هذا القبيل

انظر في هذا الرابط:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

كما يمكنك محاولة تشغيل ملف الجار كـAdministrator او فتح الـCommand Line كــ Administrator ومن ثم ادخال امر الــjava -jar ، في حالتي قمت باستخدام C# لانه بدا لي ان استخدام سي شارب في هذه الحالة منطقي جدا، كما ان هذه احد نقاط ضعف الجافا فيما يخص انظمة التشغيل تجدها ضعيفه في الاماكن التي تعنى بالــ Native Functionality.

بالتوفيق

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

الف شكر اخي mental-driller افدتني كثيراً احببت البرمجة بـ الجافا كثير الان علي الرجوع والبحث في c++ لاني من فترة طويلة ماعملت على c++ ونسيت اشياء كثيرة الرابط الي اعطيتني اياه موضحين كل حاجة

يعطيك الف عافية اخي mental-driller اذا كان عندك كود جاهز او اي معلومات اضافية ياريت تزودني بها ......انا اتذكر قبل سنوات واجهتني مشكلة نقل الملفات من مكان الى مكان في الوندوز 7 وفعلا ما كان لها الا ال c

هاذي الكود c++ لـ نقل الملفات من مكان الى مكان من غير المطالبة بأي صلاحيات في الوندوز 7 وكان شغال 100 % فكرت يمكن احد يحتاج له

#include <iostream>
#include <cstdlib>

int main(){
    using namespace std;
    system ("copy c:\\folder1\\xxx.exe c:\\folder2");
    return 0;


}
#6
اقتباس
هاذي الكود C++ لـ نقل الملفات من مكان الى مكان من غير المطالبة بأي صلاحيات في الوندوز 7 وكان شغال 100%

فعلا, الدالة system من الأدوات القوية جدا (لأنها تُعطي قوة الــ cmd لـ اللغة نفسها) و التي ورثتها السي++ عن السي.

لمن يريد المزيد, هذا مقال جميل جداً للمشرف أحمد الشنقيطي تحدث فيه عن بعض الاستخدامات المهمة للدالة system في السي++ :

الاستخدامات المتقدمة للدالة system

بالنسبة للكود الذي وضعه الأخ xma فلدي ملاحظة صغيرة حوله :)

عند نسخ ملف معين لابد من مراعاة الإمتداد, الكتابة الصحيحة تكون هكذا مثلا :

system ("COPY D:\\folder1\\nameOfFile.Extension C:\\folder2\\newName.Extension");
#7

اشكر جميع من شارك وشكر خاص للاخ mental-drille بس عندي سؤال انا كتبت الــــــ Mainfest file ولان شغال تمام

Executable: IsUserAdmin.exe

Manifest:IsUserAdmin.exe.manifest

Sample application manifest file:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity version="1.0.0.0"

processorArchitecture="X86"

name="IsUserAdmin"

type="win32"/>

<description>Description of your application</description>

<!-- Identify the application security requirements. -->

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

<security>

<requestedPrivileges>

<requestedExecutionLevel

level="requireAdministrator"

uiAccess="false"/>

</requestedPrivileges>

</security>

</trustInfo>

</assembly>

--------------------------------------------------------------------

انا انوي توزيع البرنامج حتى يعمل على اكثر من كمبيوتر لكن الحقيقة انا ما فهمت السطر السادس

الي هوه

assemblyIdentity version="1.0.0.0"

ياريت حد يخبرني ماهو assemblyIdentity لاني ناوي اوزع البرنامج واحتمال الفيرجن الي على جهازي مو هيه الي على جهاز غيري مع الشكر

تم تعديل هذه المشاركة بواسطة xma في 29 أكتوبر 2012 في 12:39

#8
xma كتب:

اشكر جميع من شارك وشكر خاص للاخ mental-drille بس عندي سؤال انا كتبت الــــــ Mainfest file ولان شغال تمام

Executable: IsUserAdmin.exe

Manifest:IsUserAdmin.exe.manifest

Sample application manifest file:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity version="1.0.0.0"

processorArchitecture="X86"

name="IsUserAdmin"

type="win32"/>

<description>Description of your application</description>

<!-- Identify the application security requirements. -->

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

<security>

<requestedPrivileges>

<requestedExecutionLevel

level="requireAdministrator"

uiAccess="false"/>

</requestedPrivileges>

</security>

</trustInfo>

</assembly>

--------------------------------------------------------------------

انا انوي توزيع البرنامج حتى يعمل على اكثر من كمبيوتر لكن الحقيقة انا ما فهمت السطر السادس

الي هوه

assemblyIdentity version="1.0.0.0"

ياريت حد يخبرني ماهو assemblyIdentity لاني ناوي اوزع البرنامج واحتمال الفيرجن الي على جهازي مو هيه الي على جهاز غيري مع الشكر

حسب معرفتي بالسي شارب فإن الــ assembly هو برنامجك ورقم النسخه هي النسخه التي تعطيها انت لبرنامجك وقيمتها اختياريه، لان ستظهر في معلومات البرنامج. ولكن يفضل ترك الرقم على ماهو.

تحياتي

تم تعديل هذه المشاركة بواسطة mental-driller في 31 أكتوبر 2012 في 16:56

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#9

أخي ممكن تفيدك الأكواد هاي مع الشكر :)

            String execStr = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";
            Process proc = Runtime.getRuntime().exec(execStr);

            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec("C:\\Windows\\notepad.exe C:\\test.txt");

        ProcessBuilder pb = new ProcessBuilder();
            pb.command("Notepad.exe");
            pb.start();
#10

ربما تحتاج أن يعمل برنامجك كمدير ، لذلك قم بتحويل ملف الجار إلى exe ثم أعطه صلاحيات المدير ، تتبع هذا الموضوع لفعل ذلك :

/index.php?showtopic=271842

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