יצירת קובץ התקנה (exe.) - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

יצירת קובץ התקנה (exe.)


eido300

Recommended Posts

משתני סביבה - environment variables

אלה משתנים שמוגדרים ברמת מערכת ההפעלה ואפשר לשמור בהם מידע שנגיש לכל האפליקציות. למשל, המשתנה computername יכיל את שם המחשב. המשתנה temp יכיל את שם התיקיה שבה המחשב שומר קבצים זמניים. יש הרבה משתנים כאלה וגם אתה יכול להגדיר משלך. ב- יש לא מעט משתנים שיכולים לעזור לך בערכת ההתקנה שלך. למשל, במקום להחליט מראש שאתה מתקין ב program files , מקובל לשאול 'איפה מערכת ההפעלה מתקינה תוכנות? ' . זאת מכיוון שלפעמים אנשים מתקינים את על כונן אחר, או מעבירים את התיקיה הזו. בהרבה מקרים תרצה ליצור קובץ זמני, ואיפה תיצור אותו? תשאל את מערכת ההפעלה!

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

קל מאוד לקרוא משתנים מתוך התוכנה שלך, ויש הרבה משתנים ידועים מראש.

קישור לתוכן
שתף באתרים אחרים

  • תגובות 46
  • נוצר
  • תגובה אחרונה

זאת אומרת שאני צריך לכתוב תוכנה שתעתיק/תיצור את התוכנה המקומפלת במשתנה סביבה שמכיל את הנתיב לתיקייה program files? לדוגמא הקוד הזה:

Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);

ובמקרה שאני צריך ליצור קבצים זמניים אני אמור לשים אותם לפי הנתיב שרשום במשתנה סביבה של הtemp?

קישור לתוכן
שתף באתרים אחרים

הדרך הפשוטה - תכתוב תוכנה שמעתיקה קובץ מהתיקיה הנוכחית לכונן C , אחר כך כותבת משהו ל registry (אם צריך), יוצרת קיצור דרך וכו'. כל אחד מהשלבים האלה זה קוד פשוט שאפשר למצוא באינטרנט. תקמפל את התוכנה הזו ושים אותה ביחד עם התוכנה הקודמת שכתבת באותה תיקיה. כשתריץ אותה היא תעתיק ותעשה מה שכתבת לה לעשות.

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

אני ממש סקרן לדעת למה אתה מעוניין לכתוב את כל זה בעצמך :-)

מצאתי דרך מסורבלת משהו, אבל עובדת : הרעיון הוא להכניס את התוכנה המקומפלת לתוכנה שאנו בונים לא בתור תוכנה אלא בתור מערך של בייטים ואז אותם להעתיק בתור קובץ למקום המבוקש, הדרך הכי פשוטה היא לבנות תוכנה שלוקחת קובץ, קוראת אותו בייט אחר בייט, ממירה אותו לbase64 וכותבת אותו לתוך קובץ טקסט, (כפי שאתם יודעים התוכנה הזאת בנויה מבערך 4 שורות קוד, כך שזה לא בעיה,בסוף אני אביא את הקוד.), להעתיק את תוכן הקובץ שנוצר (כמו שהוא) לstring בתוכנה שאנו בונים , להמיר בחזרה למערך של בייטים, ולכתוב את כל המערך למקום שבו אנו רוצים שהתוכנ המקומפלת תהיה, זה יוצר את התוכנה שם, זה די דומה לדרך ה"פחות פשוטה".

הנה הקוד לשתי חלקי התוכנות:

תוכנה א: (שממירה לbase64)


byte[] buffer = File.ReadAllBytes("appName.exe");
string base64Encoded = Convert.ToBase64String(buffer);
TextWriter tx = new StreamWriter("appName.txt");
tx.Write(base64Encoded);

תוכנה ב: (שיוצרת בחזרה את התוכנה)


string toFile1 = "content of appName.txt ";
byte[] toFile = Convert.FromBase64String(toFile1);
File.WriteAllBytes("appName.exe", toFile);

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

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


string pathToI;
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
{
fbd.ShowDialog();
pathToInstall = fbd.SelectedPath;
}

Directory.CreateDirectory(pathToI + "\\new directory");

הוא לא יצור את התיקייה איפה שבחרתי אלא יצור תיקייה בשם new directory ליד הקובץ התקנה, מה לעשות?

קישור לתוכן
שתף באתרים אחרים

למה לא לדחוף את ה EXE המקורי כ RESOURCE בינארי בתוך ההתקנה וזהו (גם לא הבנתי מה ההמרה לקובץ TXT נותנת לך בחיים). שים לב לטעות כתיב שלך pathToI ו pathToInstall ... תדפיס את המחרוזת שאתה מעביר ל createdirectory ותבדוק את עצמך.

קישור לתוכן
שתף באתרים אחרים

  1. אני לא רוצה לדחוף את הexe כ-resource כי בכזה מצב המהדר לא יוצר קובץ exe שמכיל גם את הקובץ המצורף אלא תיקייה שבה יש גם את הקובץ המצורף, ובשביל להתקין את זה אני אצטרך להעביר גם את כל הקבצים המצורפים, ומזה אני רוצה להמנע, אני רוצה שההתקנה תגיע בתור קובץ אחד, לא שאני אצטרך להעביר עם זה תיקייה שלמה של קבצים.
  2. לגבי ההמרה - אני אנסה להסביר את זה יותר טוב, כמו שכתבתי ב-1 אני רוצה ליצור קובץ התקנה שיחלץ את התוכנות שמתקינים למקומות מסויימים, ואני מחפש שזה יהיה קובץ בודד (כך שא"א לצרף אליו קבצים) האפשרות היחידה שאני מכיר זה פשוט לקחת את התוכנה שרוצים לחלץ, לקרוא את הקוד שלה ולכתוב אותו כמו שהוא עם אותו סיומת למקום הרצוי, יש 2 בעיות עם זה: 1. כל עוד אתה לא ממיר את תוכן הקובץ לbase64 המהדר לא יודע איך להתעסק עם זה כמו שצריך והוא לא יוצר את התוכנה. 2.ליצור קובץ התקנה שקודם יקרא את התוכנה ואחר כך יכתוב אותה במקום אחר, לא מועיל לנו בכלל (מהמון סיבות). האפשרות היחידה היא לבנות תוכנת עזר (שלא קשורה ולא תכלל בהתקנה) שתפקידה לקרוא ולהמיר את הקובץ, עדיין, זה שהיא קראה אותו לא עוזר לנו, אנחנו הרי צריכים את התוכן המומר בתור string בתוכנת ההתקנה ולא בתוכנת העזר, איך מעבירים אותו לתוכנת ההתקנה שאנו בונים עכשיו? טוב, להמשיך מכאן יש כמה אפשרויות וכל אחד יעשה כטוב בעיניו, לי היה נוח לשמור את הקובץ המומר בתוך קובץ txt ככה שאני אוכל פשוט להעתיק (ידנית, העתק-הדבק) את התוכן שלו לתוך string בתוכנת ההתקנה, ואז מה שנשאר לעשות זה רק לגרום לתוכנה להמיר את זה בחזרה למערך של בייטים ולשמור את זה במקום שרוצים. כמובן אפשר פשוט להגיד לתוכנה שתשמר את התוכן המומר בclipboard ולחסוך את הקובץ txt, אבל שוב זה עניין של טעם, כל אחד ומה שנוח לו (וגם, האמת, אתמול באחד בלילה לא חשבתי על זה...). בסופו של דבר ככה החלק של תוכנת ההתקנה אמור להראות.
  3. צודק, יש לי כאן טעות, אבל בקוד מקור של התוכנה שניהם כתובים בתור pathToI, שיניתי את זה כאן כדי שיהיה נוח להבנה, כנראה שכחתי לשנות גם את השני...
  4. בתוכנה בניתי textbox שמראה את המקום שהתוכנה תבנה אליו, (כאן השמטתי את החלק הזה), והוא מציג את את מה שמושם בpathToI, זה הקוד המקורי:


{
fbd.ShowDialog();
pathToI = pathTo.Text = fbd.SelectedPath;
}
using (FolderBrowserDialog fbd = new FolderBrowserDialog())

עריכה: מצאתי את הטעות, אני בהתחלה הצגתי בtaxtbox את הנתיב ברירת מחדל, ושכחתי שהצבתי את זה ידנית ולא דרך ה-folderBrowserDialog, לכן כל עוד לא בחרו נתיב אלא השאירו את זה כמו הברירת מחדל, המשתנה pathToI נשאר ריק...

עריכה: אתה צודק קובץ טקסט לא עוזר, עשיתי דרך הclipboard וזה עבד

קישור לתוכן
שתף באתרים אחרים

ארכיון

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


×
  • צור חדש...