פורסם 2011 בספטמבר 2814 שנים אני מעוניין לכתוב תוכנית מסויימת שתנגן קבצי Wireshark, יש לי קובץ exe שמסוגל לנגן את הקבצים האלו והשאלה שלי היא האם אפשרי שהתוכנית שלי תקרא לקובץ exe הזה ותוסיף לו עוד כמה פרמטרים אחרי ה-exe (כמו למשל Path ומספר מסויים שמייצג מהירות לצורך הדוגמא)איך עושים דבר כזה ?
פורסם 2011 בספטמבר 2914 שנים http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start.aspx
פורסם 2011 בספטמבר 2914 שנים מחבר 1. איזה מהאפשרויות אני אמור לבחור ?2. האם לאחר הבנייה הקובץ exe של הויזואל "יעטוף" גם את קובץ ה-exe החיצוני ?
פורסם 2011 בספטמבר 2914 שנים א. תקרא את התיאורים של האפשרויות השונות, תיכנס אליהן ותראה את הדוגמאות, ותבחר בהתאם.ב. לא. כל מה שהפונקציה הזו עושה הוא להריץ תוכנית חיצונית. אפשר לשלב קובץ בתוך ה-exe שלך כ-embedded resource, אבל אז כשתרצה להריץ אותו תצטרך "להוציא" אותו מה-exe שלך, כמו בדוגמא כאן.
פורסם 2011 בספטמבר 2914 שנים מחבר אחרי יצירה של ProcessStartInfo (והעברה של הפרמטרים כמו למשל PATH של קובץ ה-EXE של התוכנה שאני רוצה להריץ ועוד פרמטרים) אז אם למשל הייתי מריץ את הפקודה בחלון CMD הייתי מקבל הודעות מסויימות, איך אני יכול לקלוט את אותם הודעות לתוך STRING עלמנת לחלץ משם את המידע הרלונטי לגבי ?
פורסם 2011 בספטמבר 2914 שנים http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
פורסם 2011 בספטמבר 2914 שנים מחבר אני קולט את כל השורות למערך ע"י הפקודה string result = myStreamReader.ReadLine(); בלולאה כמובן ואז מציג אבל יש לי בעיה שאם הקובץ שלי מורכב ממילים שמופרדות בניהם ברווח אז הוא לא מציג לי אותם למשלtest 1 2 3 לא יוצא טוב כמו test_1_2_3אני לא מבין למה זה קורה כי אני מכניס את כל השורה לתא במערך ואח"כ מדפיס את כל השורה. Process Capinfos = new Process(); ProcessStartInfo ps1 = new ProcessStartInfo(@"C:\Program Files\Wireshark\capinfos.exe", @"D:\Downloads\10_attach_Copy.snoop"); ps1.RedirectStandardOutput = true; ps1.RedirectStandardError = true; ps1.WindowStyle = ProcessWindowStyle.Hidden; ps1.CreateNoWindow = false; ps1.UseShellExecute = false; ps1.ErrorDialog = false; Capinfos.StartInfo = ps1; Capinfos.Start(); StreamReader myStreamReader = Capinfos.StandardOutput; string result = myStreamReader.ReadLine(); Console.WriteLine(result); string[] array = new string[18]; for (int i = 0; i < array.Length; i++) { array[i] = myStreamReader.ReadLine(); } Console.WriteLine(array[0]); Console.WriteLine(array[4]); Console.WriteLine(array[5]); Console.WriteLine(array[7]);כמו בדוגמא שנתתי, אם היה רשום במקום השורה הראשונה את זה זה לא היה מדפיס:ProcessStartInfo ps1 = new ProcessStartInfo(@"C:\Program Files\Wireshark\capinfos.exe", @"D:\Downloads\10_attach Copy.snoop");
פורסם 2011 באוקטובר 114 שנים מחבר אני חושב שזה בגלל שיש רווח בשם אז הארגומנט שאני שולח זה כאילו יותר מאחד ואז הוא לא מוצא את הקובץ הפיזי על המחשב (כי הוא מחפש שם שונה) אבל אני לא יודע איך להתגבר על זה.
פורסם 2011 באוקטובר 114 שנים כמובן. אותו דבר קורה גם כשאתה מנסה לעשות את זה סתם ב-command line. הפתרון הוא להוסיף מרכאות סביב הארגומנט:http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/7d47cd31-aae8-4648-8285-c82cae6fdf50
פורסם 2011 באוקטובר 114 שנים מחבר לא זה הקטע, כשאני מריץ את זה ידני (דרך Command Line) הכל בסדר. ואגב ניסיתי את מה ששלחת לי וזה לא עובד. הנה תמונה מה-Command Line ובדוגמא הזו זה עובד:
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.