הייתי צריך לעשות משהוא מהיר, ומלוכלך, עם סיכון קטן שאצטרך לשחרר את קוד המקור שלו.
לכן, בחרתי במקום להשתמש בשפה מאוד פשוטה (C++) לבחור בפייתון. לפייתון יש המון יתרונות, אבל בשבילי גם הרבה חסרונות. השפה הזאת היא בדרך כלל לא ברירת המחדל שלי, אבל כשיש צורך והיא הכי מתאימה אז בה אני בוחר. למרות החסרות של פייתון אני השתמשתי בסט החוקים שיש אצלנו בחברה לכתיבת קוד, אז מבחינת איכות הקוד הבסיס זה בערך אותה האיכות. למה אני אומר שזה מלוכלך ? כי בשונה מהכלים הרגילים שלי ישנן תלויות שאינן עומדת בתקינה שאיתה אני בדרך כלל עובד, אבל מכיוון שפה לא הייתי צריך לעמוד באותה התקינה אז ייכלתי להרשות זאת לעצמי.
כרגיל לפייתון, יצא לי לכתוב את התסריט הלוגי בסדר גודל של כארבעים דקות, זה לא הרבה, וזה לא קצת, זה הזמן למטרה כזאת. הבעיה ? יש לי המון תלויות. ועליהם אני לא עברתי היום, אבל יצא לי לעבור על הקוד של חלקם לפני מספר חודשים, על האחרים כמו pandas ט numpy אני די בקטע של סמוך על סמוך. בשפות פשוטות (כמו C++ למשל ) אז קיימות ספרייות תקניות שמספקות את הצרכים, והן נבדקות המון, גם בקוד פתוח וגם בקוד סגור.
חוץ מזה, שאני משתמש בדברים יחסית מוכרים, דברים כמו pandas וnumpy ביחד עם מספר רב של חבילות. בדר"כ זה משהוא שאני לא עושה, אני אשתמש במספר מאוד קטן של תלויות, אבל פה היה משהוא שלא דרש אימות מאוד כבד.
כאשר אני בונה מתסריט פייתון לקובץ exe , ואני לא בוחר להשתמש ב cython אלא פשוט בבנייה ישירה , אני משתמש ב PyInstaller המאוד נוח. מדובר בכלי פתוח , חופשי , שעדיין לא גרם לי לפקפק בו.
הדברים שצריך לעשות בשביל לעטוף ולהנות מתוכנה כמו שצריך , זה קודם כל לייצר לוגו לתוכנה בפורמט png , בגדלים של 12, 16, 18,24,32,48,56,96,128 ו 256 . לעטוף הכל ע"י הכלי icotool ולעטוף הכל לתוך ico בודד.
אפשר בצורה הבאה:
icotool -c -o logo.ico \ --index 1 ./logo_12.png \ --index 2 ./logo_16.png \ --index 3 ./logo_18.png \ --index 4 ./logo_24.png \ --index 5 ./logo_32.png \ --index 6 ./logo_48.png \ --index 7 ./logo_56.png \ --index 8 ./logo_64.png \ --index 9 ./logo_72.png \ --index 10 ./logo_96.png \ --index 11 ./logo_128.png \ --index 12 ./logo_256.pngאנחנו צריכים לבנות את הico לפני כן, כי למרות ש pyinstaller יכול להשתמש בחבילה חיצונית בשביל לעטוף לוגו, במקרה שלי הלוגו יצא ממש מכוער ומרוח, אבל שימוש ב icotool לא רק שאפשר לי מספר גדלים , אלא גם התמונה יצאה יפה יותר.
לאחר שבניתם את זה ,יש לייצר קובץ version כדוגמה:
# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
ffi=FixedFileInfo(
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
# Set not needed items to zero 0.
filevers=(124, 81, 52, 173),
prodvers=(124, 81, 52, 173),
# Contains a bitmask that specifies the valid bits 'flags'
mask=0x3f,
# Contains a bitmask that specifies the Boolean attributes of the file.
flags=0x0,
# The operating system for which this file was designed.
# 0x4 - NT and there is no need to change it.
OS=0x40004,
# The general type of file.
# 0x1 - the file is an application.
fileType=0x1,
# The function of the file.
# 0x0 - the function is not defined for this fileType
subtype=0x0,
# Creation date and time stamp.
date=(0, 0)
),
kids=[
StringFileInfo(
[
StringTable(
'040904B0',
[StringStruct('CompanyName', 'Company Name'),
StringStruct('FileDescription', 'heat sensor utility'),
StringStruct('FileVersion', '124.81.52.173'),
StringStruct('InternalName', 'heatsensor'),
StringStruct('LegalCopyright', '(C) Foobar Inc.'),
StringStruct('OriginalFilename', 'heatsensor.exe'),
StringStruct('ProductName', 'Baz utility'),
StringStruct('ProductVersion', '124.81.52')])
]),
VarFileInfo([VarStruct('Translation', [1033, 1200])])
]
)
המבנה הזו הוא המקבילה של המבנה VS_VERSION_INFO שאנחנו מוסיפים כאשר בונים תוכנית בשפת C ו C++.ובדיוק כמו שם צריך לזכור ש filesver וגם FileDescription חייבים לייצג את אותו הערך !.לאחר ייצור ה exe ע"י שימוש בכלי pyinstaller אני חותם על הקובץ באמצעות signtool, כמובן שאתם צריכים חותמת בצורת pfx בה אתם יכולים להשתמש. כן בדיוק אותו הכלי שאנחנו משתמשים בו בשביל לחתום על דברים שבנינו ב C++, אין הבדל.
את החותמת pfx ניתן לייצר באמצעות openssl על מנת להמיר מהפורמט בה יש לכם חותמת שיכולה לבצע חתימה על קוד. האם חתימה על קוד נדרשת ? תראו , חותמת EV מקלה על החיים בהתקנה (אינני יודע כמה עולה) , אבל נוחה יותר, חותמת selfsigned ע"י מישהוא שאתם מכירים ? לדעתי שווה גם כן. אבל זה יותר נראות מאשר כל דבר אחר לדעתי היום.
אין תגובות:
הוסף רשומת תגובה