none
כיצד להגדיר הגישה לקבצי האפליקציה במסלולי debug או release בפלטפורמת דוטנט Framework 4 ? RRS feed

  • שאלה

  • שלום רב !

    יצרתי פרויקט שכתוב בסישרפ ( ,(Visual Cשנכתב באמצעות .NET framework4

    א. הקדמה -

        1. מסלול debug -

            בעת הפיתוח השתמשתי במסלול Debug, כך שכל קבצי הפרוייקט (קבצי הקריאה + קבצי הכתיבה), נשמרו

            בתיקיית Debug של הפרויקט, והכול עבד כראוי.

        2. מסלול release

            בסיום הפרויקט, וכאשר הוא ישוחרר release ללקוחות, קיימת דרישה בהפרדה בין קבצי הקריאה לבין קבצי  

            הכתיבה של הפרויקט). כלומר, קבצי הקריאה של הפרויקט ימוקמו בתיקיית הפרויקט שנמצאת בתיקיית

            Program Files שבמחשב הלקוח, (הערה בתיקיית Program Files הרשאת ברירת המחדל היא "קריאה בלבד")

           ואלו קבצי הכתיבה של הפרויקט צריכים להיות בתיקיית Roaming\MyProgect\ \c:\Users\username\AppData

    ב. השאלה שמציגה את הבעייה

    כיצד להגדיר בתוך האפליקציה, את כתובת קבצי המערכת לפי הדרישות השונות של מסלולי debug ו- release  כך ש:

    במסלול debug  -  הפנייה לקבציי האפליקציה תהיה  לתיקיית debug של הפרויקט (זוהי ברירת המחדל, וזה עובד כראוי)

    במסלול release – א. הפנייה לקבציי הקריאה של האפליקציה תהיה לתיקיית release של הפרוייקט

                               ב. הפנייה לקבציי הכתיבה של האפליקציה תהיה לתיקיית

                                                                                      Roaming\MyProgect\ \c:\Users\username\AppData

    מאחר ואיני מתמצא כלל בתחום זה,

                             אודה לכם אם אקבל הנחיות כיצד להגדיר הדרישות הנ"ל, כאמור במסלולי debug ו- release

    בברכה

    איציק

    יום רביעי 12 פברואר 2014 08:13

תשובות

  • בוקר טוב איציק,

    אני מקווה שהבנתי את השאלה שלך. את הקביעה אם אנחנו מקפלים כרגע במצב debug או במצב release או היכן יהיה התוצאה אתה קובע במאפיינים של הפרוייקט תחת ה TAB של Build ראה את התמונה המצורפת (סימנתי 2 אליפסות בתמונה כדי להדגיש 2 נקודות הקשורות למה שאתה מחפש).

    אני מציע לחפש חומר נוסף על הנושא של debug מול release. יש הבדלים בתוצאות הקיפול שכדאי להכיר.

    אני מקווה שזה עונה לשאלה שלך :-)


    [Personal Site] [Blog] [Facebook]signature

    • נערך על-ידי pituachMVP, Moderator יום רביעי 12 פברואר 2014 08:41
    • הוצע כתשובה על-ידי Eran Sharvit יום רביעי 12 פברואר 2014 11:35
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 25 פברואר 2014 10:02
    יום רביעי 12 פברואר 2014 08:40
    מנחה דיון
  • צודק :-) הפתרון שנתתי הוא לא דינאמי. עבודת הפיתוח נערכת במחשב מסויים ולא בצורה דינאמית שמתאימה לכל משתמש. אפשר כמובן לעשות שימוש בקיצורי דרך שמתאימים במערכות הפעלה שונות, אבל אין בזה כל כך הגיון בדרך כלל. אני חושב שאולי מה שאתה צריך זה משהו מעט שונה. יכול להיות שמה שאתה צריך זה שהתוצאה של הפרוייקט תהיה במיקום שמתאים לכל משתמש ומערכת הפעלה. זה הגיוני כמובן.

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

    תבדוק לדוגמה את זה עוזר לך:

    http://stackoverflow.com/questions/2251062/how-to-make-an-installer-for-my-c-sharp-application

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

    בכל מקרה אתה יכול לעבוד עם קיצורי מיקומי תקיות מיוחדות כמו למשל %windir% זה התקייה ששם מותקן מערכת ההפעלה או %USERPROFILE% שזה קיצור לתקייה של המשתמש (זה מוביל כל משתמש למיקום אחר כמובן) ועוד. תבדוק את הקישור הבא אם זה מה שאתה צריך:
    http://en.wikipedia.org/wiki/Special_Folders


    [Personal Site] [Blog] [Facebook]signature

    • נערך על-ידי pituachMVP, Moderator יום רביעי 12 פברואר 2014 16:37
    • סומן כתשובה על-ידי izik1948 יום ראשון 02 מרץ 2014 15:45
    יום רביעי 12 פברואר 2014 15:25
    מנחה דיון
  • שוב, שלום רב לכולם

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

    תזכורת על הבעייה

    כאמור, היה צורך להפריד בין קבצי הקריאה של הישום, שנמצאים בתיקיית Program Files  לבין קבצי הכתיבה של הישום

    שצריכים להיות בתיקית הפרוייקט שנמצא בתיקיית Roaming

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

    במצב קודם, כל הקבצים הותקנו בתיקיית Program Files, וללא הרשאה מתאימה לא ניתן היה לבצע כתיבה על קבצי הישום.

    במצב החדש, הועברו קבצי הכתיבה של הישום לתיקיית Roaming  שמאפשרת כתיבה תמיד, מבלי צורך בהרשאה מתאימה.

    שלבי הפיתרון

    א. בפרויקט ההתקנה -

    נוספה תיקייה   Special Folder  חדשה, בשם  User's Application Data Folder   ולתוכה הוכנסו קבצי הכתיבה של הישום.

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

    ב. בפרויקט הישום -

    בשיטת main() שבמחלקת Program  הוכנס הבלוק הבא :

     string exeFileName = AppDomain.CurrentDomain.FriendlyName.Substring(0, AppDomain.CurrentDomain.FriendlyName.IndexOf('.'));

     string writeFilesPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

     string filesRoot = writeFilesPath + "\\" + exeFileName;

     System.IO.Directory.SetCurrentDirectory(filesRoot);

    הסבר: בעת הפעלת הישום, בלוק זה  משנה תא תיקיית ברירת המחדל , לתיקיית הכתיבה של היישום, שכאמור נמצאת תחת תיקיית Roaming

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

    בברכת שבוע טוב

    איציק

    <input id="31cc6a70-c995-482a-ab7e-0a36974a162f_attachments" type="hidden" value="" />

    • סומן כתשובה על-ידי izik1948 שבת 01 מרץ 2014 13:56
    • נערך על-ידי izik1948 שבת 01 מרץ 2014 14:02
    שבת 01 מרץ 2014 13:53

כל התגובות

  • בוקר טוב איציק,

    אני מקווה שהבנתי את השאלה שלך. את הקביעה אם אנחנו מקפלים כרגע במצב debug או במצב release או היכן יהיה התוצאה אתה קובע במאפיינים של הפרוייקט תחת ה TAB של Build ראה את התמונה המצורפת (סימנתי 2 אליפסות בתמונה כדי להדגיש 2 נקודות הקשורות למה שאתה מחפש).

    אני מציע לחפש חומר נוסף על הנושא של debug מול release. יש הבדלים בתוצאות הקיפול שכדאי להכיר.

    אני מקווה שזה עונה לשאלה שלך :-)


    [Personal Site] [Blog] [Facebook]signature

    • נערך על-ידי pituachMVP, Moderator יום רביעי 12 פברואר 2014 08:41
    • הוצע כתשובה על-ידי Eran Sharvit יום רביעי 12 פברואר 2014 11:35
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 25 פברואר 2014 10:02
    יום רביעי 12 פברואר 2014 08:40
    מנחה דיון
  • שלום רב לכולם

    תחילה אני רוצה להודות על ההתייחסות המהירה לשאלתי.

    ואכן, פעלתי על פי העצה שקיבלתי בפורום,  נכנסתי לכרטסת build של הפרויקט,

    ובתיבה המשולבת :  Configuration  בחרתי את אפשרות Release

     ירדתי לתחתית המסך לכותרת Output , וראיתי שבשדה Output path  מוגדר bin\Release\

    הבעיה בהגדרה הנ"ל (bin\Release\), שהיא קבועה, ולא דינמית,

       ולכן לא מתאימה לכל גרסאות windows השונות (לדוגמא: xp גירסת   או  גירסת windows 7

    (לדוגמא אם אגדיר את הנתיב הנ"ל כ- Roaming\MyProgect\ \c:\Users\username\AppData

    אזי זה יתאים ויעבוד בגרסת windows 7, אך לא יעבוד בגרסת xp שבה לא קיימת הנתיב c:\Users )

    משום כך, הדרישה שלי היא להגדרה דינמית של Output path, בכדי שכאמור היישום יפעל תחת כל הגרסאות של windows.

    בנוסף, כפי שהוצע לי כאן, ניסיתי לחפש חומר כתוב ע"י פעולת חיפוש של  "debug מול "release, אך לא מצאתי שום התייחסות להגדרה דינמית שנדרשת כאן.

    לפיכך, אני אשמח מאד, אם מישהו יעזור לי בפיתרון הבעיה :

    א. או באמצעות הגדרה דינמית של Output path

    ב. או מציאת כתובת קבועה למיקום קובצי הפרויקט, שקיימת בכל גרסאות window השונות.

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

       המקור של הפרויקט)

    אני רוצה להודות שוב, על הקדשת הזמן והניסיון לעזור לי

    בברכת יום טוב

    איציק

    יום רביעי 12 פברואר 2014 11:45
  • צודק :-) הפתרון שנתתי הוא לא דינאמי. עבודת הפיתוח נערכת במחשב מסויים ולא בצורה דינאמית שמתאימה לכל משתמש. אפשר כמובן לעשות שימוש בקיצורי דרך שמתאימים במערכות הפעלה שונות, אבל אין בזה כל כך הגיון בדרך כלל. אני חושב שאולי מה שאתה צריך זה משהו מעט שונה. יכול להיות שמה שאתה צריך זה שהתוצאה של הפרוייקט תהיה במיקום שמתאים לכל משתמש ומערכת הפעלה. זה הגיוני כמובן.

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

    תבדוק לדוגמה את זה עוזר לך:

    http://stackoverflow.com/questions/2251062/how-to-make-an-installer-for-my-c-sharp-application

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

    בכל מקרה אתה יכול לעבוד עם קיצורי מיקומי תקיות מיוחדות כמו למשל %windir% זה התקייה ששם מותקן מערכת ההפעלה או %USERPROFILE% שזה קיצור לתקייה של המשתמש (זה מוביל כל משתמש למיקום אחר כמובן) ועוד. תבדוק את הקישור הבא אם זה מה שאתה צריך:
    http://en.wikipedia.org/wiki/Special_Folders


    [Personal Site] [Blog] [Facebook]signature

    • נערך על-ידי pituachMVP, Moderator יום רביעי 12 פברואר 2014 16:37
    • סומן כתשובה על-ידי izik1948 יום ראשון 02 מרץ 2014 15:45
    יום רביעי 12 פברואר 2014 15:25
    מנחה דיון
  • איציק מה קורה?

    האם הצלחת לממש את מה שהסברתי מעל או שעדין יש שאלות?


    [Personal Site] [Blog] [Facebook]signature

    שבת 22 פברואר 2014 17:49
    מנחה דיון
  • שוב, שלום רב לכולם

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

    תזכורת על הבעייה

    כאמור, היה צורך להפריד בין קבצי הקריאה של הישום, שנמצאים בתיקיית Program Files  לבין קבצי הכתיבה של הישום

    שצריכים להיות בתיקית הפרוייקט שנמצא בתיקיית Roaming

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

    במצב קודם, כל הקבצים הותקנו בתיקיית Program Files, וללא הרשאה מתאימה לא ניתן היה לבצע כתיבה על קבצי הישום.

    במצב החדש, הועברו קבצי הכתיבה של הישום לתיקיית Roaming  שמאפשרת כתיבה תמיד, מבלי צורך בהרשאה מתאימה.

    שלבי הפיתרון

    א. בפרויקט ההתקנה -

    נוספה תיקייה   Special Folder  חדשה, בשם  User's Application Data Folder   ולתוכה הוכנסו קבצי הכתיבה של הישום.

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

    ב. בפרויקט הישום -

    בשיטת main() שבמחלקת Program  הוכנס הבלוק הבא :

     string exeFileName = AppDomain.CurrentDomain.FriendlyName.Substring(0, AppDomain.CurrentDomain.FriendlyName.IndexOf('.'));

     string writeFilesPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

     string filesRoot = writeFilesPath + "\\" + exeFileName;

     System.IO.Directory.SetCurrentDirectory(filesRoot);

    הסבר: בעת הפעלת הישום, בלוק זה  משנה תא תיקיית ברירת המחדל , לתיקיית הכתיבה של היישום, שכאמור נמצאת תחת תיקיית Roaming

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

    בברכת שבוע טוב

    איציק

    <input id="31cc6a70-c995-482a-ab7e-0a36974a162f_attachments" type="hidden" value="" />

    • סומן כתשובה על-ידי izik1948 שבת 01 מרץ 2014 13:56
    • נערך על-ידי izik1948 שבת 01 מרץ 2014 14:02
    שבת 01 מרץ 2014 13:53