עבור לתוכן

הוספת קובץ exe (משפה אחרת) לתוכנית ב-C#

Featured Replies

פורסם

אני מעוניין לכתוב תוכנית מסויימת שתנגן קבצי Wireshark, יש לי קובץ exe שמסוגל לנגן את הקבצים האלו והשאלה שלי היא האם אפשרי שהתוכנית שלי תקרא לקובץ exe הזה ותוסיף לו עוד כמה פרמטרים אחרי ה-exe (כמו למשל Path ומספר מסויים שמייצג מהירות לצורך הדוגמא)

איך עושים דבר כזה ?

פורסם
  • מחבר

1. איזה מהאפשרויות אני אמור לבחור ?

2. האם לאחר הבנייה הקובץ exe של הויזואל "יעטוף" גם את קובץ ה-exe החיצוני ?

פורסם

א. תקרא את התיאורים של האפשרויות השונות, תיכנס אליהן ותראה את הדוגמאות, ותבחר בהתאם.

ב. לא. כל מה שהפונקציה הזו עושה הוא להריץ תוכנית חיצונית. אפשר לשלב קובץ בתוך ה-exe שלך כ-embedded resource, אבל אז כשתרצה להריץ אותו תצטרך "להוציא" אותו מה-exe שלך, כמו בדוגמא כאן.

פורסם
  • מחבר

אוקיי תודה רבה אני אנסה.

פורסם
  • מחבר

אחרי יצירה של ProcessStartInfo (והעברה של הפרמטרים כמו למשל PATH של קובץ ה-EXE של התוכנה שאני רוצה להריץ ועוד פרמטרים) אז אם למשל הייתי מריץ את הפקודה בחלון CMD הייתי מקבל הודעות מסויימות, איך אני יכול לקלוט את אותם הודעות לתוך STRING עלמנת לחלץ משם את המידע הרלונטי לגבי ?

פורסם
  • מחבר

אני קולט את כל השורות למערך ע"י הפקודה 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");

פורסם
  • מחבר

אני חושב שזה בגלל שיש רווח בשם אז הארגומנט שאני שולח זה כאילו יותר מאחד ואז הוא לא מוצא את הקובץ הפיזי על המחשב (כי הוא מחפש שם שונה) אבל אני לא יודע איך להתגבר על זה.

פורסם
  • מחבר

לא זה הקטע, כשאני מריץ את זה ידני (דרך Command Line) הכל בסדר.

ואגב ניסיתי את מה ששלחת לי וזה לא עובד.

הנה תמונה מה-Command Line ובדוגמא הזו זה עובד:

unledwdk.jpg

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים