בקשת מידע | יצירת קובץ yml למתקין inno
-
מקווה שאני בנושא המתאים
אשמח לעזרת הציבור
יש לי תוכנה שקמפלתי באלקטרון ואח"כ קמפלתי ב-Inno לתוספת נוחות
הבעיה היא שכשאני מעלה את הקובץ לגיטהאב, הקובץ yml מתאים לגודל של אלקטרון ולא של Inno
יש למישהו מושג איך אני יוצר בדרך הכי קלה קובץ yml ל-Inno
זה מבנה הקובץversion: 2.0.0 files: - url: setup-2.0.0.exe sha512: qg/2aM/4H9Uf9vsxNKRPGoyFAsKkayL3TTe6hPrYQhMrPffPZmy5gZoKuCQPVb3Wl6wy5mtOWfAESXQtuJCFcw== size: 70676170 path: setup-2.0.0.exe sha512: qg/2aM/4H9Uf9vsxNKRPGoyFAsKkayL3TTe6hPrYQhMrPffPZmy5gZoKuCQPVb3Wl6wy5mtOWfAESXQtuJCFcw== releaseDate: '2025-09-04T15:35:59.072Z'
אשמח לעזרתכם
תודה רבה@חכם-בלילה-1 אתה יכול לקבוע את האלקטרון שיופעל כמתקין (לא זוכר מה הפקודה המדויקת)
ואז זה בדיוק כמו inno installer -
@NH.LOCAL כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
התקנות inno עובדות עם קובץ בסיומת iss יעודי, לא עם yml.
@NH.LOCAL לא הבנתי במקום להעלות את ה-exe לגיטהאב עם yml
להעלות את זה עם הקובץ iss?
אבל הוא לא מהווה תעודה ואין בו את ההאש של הקובץ?
אולי נשאל מהתחלה בשביל עדכון דרך תוכנה חייבים קובץ אימות? אם כן איזה?@cfopuser כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
ואז זה בדיוק כמו inno installer
@cfopuser זה ממשק הרבה פחות מוצלח
יש אפשרות להכריח את אלקטרון ליצור מתקין כמו inno (או לפחות בעברית)? -
@NH.LOCAL כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
התקנות inno עובדות עם קובץ בסיומת iss יעודי, לא עם yml.
@NH.LOCAL לא הבנתי במקום להעלות את ה-exe לגיטהאב עם yml
להעלות את זה עם הקובץ iss?
אבל הוא לא מהווה תעודה ואין בו את ההאש של הקובץ?
אולי נשאל מהתחלה בשביל עדכון דרך תוכנה חייבים קובץ אימות? אם כן איזה?@cfopuser כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
ואז זה בדיוק כמו inno installer
@cfopuser זה ממשק הרבה פחות מוצלח
יש אפשרות להכריח את אלקטרון ליצור מתקין כמו inno (או לפחות בעברית)?@חכם-בלילה-1 לא צריך קובץ אימות אתה פשוט מוריד מגיטהאב את הinstaller ומריץ אותו במצב שקט
אם זה לא המטרה שלך אולי תרחיב
-
@חכם-בלילה-1 לא צריך קובץ אימות אתה פשוט מוריד מגיטהאב את הinstaller ומריץ אותו במצב שקט
אם זה לא המטרה שלך אולי תרחיב
@cfopuser אני רוצה שהתוכנה שלי תיקח עדכון במצב שקט מהרילייס בגיטהאב,
מספיק בשביל זה להעלות נטו את המתקין exe בלי שום קובץ נוסף, והתוכנה (אלקטרון) תאשר ותתקין את העדכון?
אני לא מדבר על הורדה והתקנה ידניים. -
@cfopuser אני רוצה שהתוכנה שלי תיקח עדכון במצב שקט מהרילייס בגיטהאב,
מספיק בשביל זה להעלות נטו את המתקין exe בלי שום קובץ נוסף, והתוכנה (אלקטרון) תאשר ותתקין את העדכון?
אני לא מדבר על הורדה והתקנה ידניים.@חכם-בלילה-1 כן הינה סקריפט שיצרתי בשנייה בבינה מלאכותית שבודק אם צריך עדכון ואם כן מוריד ומריץ
using System; using System.IO; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using System.Text.Json; using System.Threading.Tasks; using System.Diagnostics; class Updater { const string Owner = "השם שלך בגיטהאב"; const string Repo = "השם של הספרייה בגיטהאב"; const string AssetFileName = "השם של הקובץ התקנה"; const string TempDownloadName = "installer.download.exe"; // temporary filename static async Task<int> Main(string[] args) { try { var latest = await GetLatestReleaseAsync(); if (latest == null) { Console.WriteLine("No release found."); return 1; } if (!TryParseVersion(latest.tag_name, out var remoteVer)) { Console.WriteLine($"Cannot parse remote tag '{latest.tag_name}' as version."); return 1; } var localVer = GetLocalVersion(); Console.WriteLine($"Local: {localVer} Remote: {remoteVer}"); if (remoteVer <= localVer) { Console.WriteLine("No update required."); return 0; } var asset = latest.assets?.FirstOrDefault(a => string.Equals(a.name, AssetFileName, StringComparison.OrdinalIgnoreCase)); if (asset == null) { Console.WriteLine($"Asset '{AssetFileName}' not found in latest release."); return 1; } var destPath = Path.Combine(Path.GetTempPath(), TempDownloadName); Console.WriteLine($"Downloading {asset.browser_download_url} -> {destPath}"); await DownloadFileAsync(asset.browser_download_url, destPath); Console.WriteLine("Download complete. Launching installer silently."); // Adjust silent args as needed. Common: /S, /silent, /quiet, /VERYSILENT for some installers. var silentArgs = "/SILENT"; var p = Process.Start(new ProcessStartInfo { FileName = destPath, Arguments = silentArgs, UseShellExecute = false, CreateNoWindow = true }); if (p != null) { p.WaitForExit(); Console.WriteLine($"Installer exited with code {p.ExitCode}"); // Optionally delete installer: try { File.Delete(destPath); } catch { } } else { Console.WriteLine("Failed to start installer process."); } return 0; } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); return 1; } } static Version GetLocalVersion() { // uses AssemblyFileVersion if present, otherwise AssemblyVersion var asm = Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly(); var fileVerAttr = asm.GetCustomAttribute<AssemblyFileVersionAttribute>(); if (fileVerAttr != null && Version.TryParse(fileVerAttr.Version, out var v1)) return v1; var ver = asm.GetName().Version ?? new Version(0, 0, 0, 0); return ver; } static bool TryParseVersion(string tag, out Version v) { v = null; if (string.IsNullOrWhiteSpace(tag)) return false; // strip leading 'v' or 'V' if (tag.StartsWith("v", StringComparison.OrdinalIgnoreCase)) tag = tag.Substring(1); // remove possible metadata after '-' (pre-release) or '+' var clean = tag.Split(new[] { '-', '+' }, 2)[0]; return Version.TryParse(clean, out v); } // Minimal release JSON shapes used class Release { public string tag_name { get; set; } public Asset[] assets { get; set; } } class Asset { public string name { get; set; } public string browser_download_url { get; set; } } static async Task<Release> GetLatestReleaseAsync() { using var http = new HttpClient(); http.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Updater", "1.0")); var url = $"https://api.github.com/repos/{Owner}/{Repo}/releases/latest"; using var resp = await http.GetAsync(url); if (!resp.IsSuccessStatusCode) return null; var json = await resp.Content.ReadAsStringAsync(); var opts = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; return JsonSerializer.Deserialize<Release>(json, opts); } static async Task DownloadFileAsync(string url, string destPath) { using var http = new HttpClient(); http.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Updater", "1.0")); using var resp = await http.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); resp.EnsureSuccessStatusCode(); using var stream = await resp.Content.ReadAsStreamAsync(); using var fs = new FileStream(destPath, FileMode.Create, FileAccess.Write, FileShare.None, 81920, true); await stream.CopyToAsync(fs); } }
הסקריפט עובד מצוין רק תזכור שהוא משווה את הגרסה שלו עצמו (בפרטים של הexe) מול הגיטהאב
-
@חכם-בלילה-1 כן הינה סקריפט שיצרתי בשנייה בבינה מלאכותית שבודק אם צריך עדכון ואם כן מוריד ומריץ
using System; using System.IO; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using System.Text.Json; using System.Threading.Tasks; using System.Diagnostics; class Updater { const string Owner = "השם שלך בגיטהאב"; const string Repo = "השם של הספרייה בגיטהאב"; const string AssetFileName = "השם של הקובץ התקנה"; const string TempDownloadName = "installer.download.exe"; // temporary filename static async Task<int> Main(string[] args) { try { var latest = await GetLatestReleaseAsync(); if (latest == null) { Console.WriteLine("No release found."); return 1; } if (!TryParseVersion(latest.tag_name, out var remoteVer)) { Console.WriteLine($"Cannot parse remote tag '{latest.tag_name}' as version."); return 1; } var localVer = GetLocalVersion(); Console.WriteLine($"Local: {localVer} Remote: {remoteVer}"); if (remoteVer <= localVer) { Console.WriteLine("No update required."); return 0; } var asset = latest.assets?.FirstOrDefault(a => string.Equals(a.name, AssetFileName, StringComparison.OrdinalIgnoreCase)); if (asset == null) { Console.WriteLine($"Asset '{AssetFileName}' not found in latest release."); return 1; } var destPath = Path.Combine(Path.GetTempPath(), TempDownloadName); Console.WriteLine($"Downloading {asset.browser_download_url} -> {destPath}"); await DownloadFileAsync(asset.browser_download_url, destPath); Console.WriteLine("Download complete. Launching installer silently."); // Adjust silent args as needed. Common: /S, /silent, /quiet, /VERYSILENT for some installers. var silentArgs = "/SILENT"; var p = Process.Start(new ProcessStartInfo { FileName = destPath, Arguments = silentArgs, UseShellExecute = false, CreateNoWindow = true }); if (p != null) { p.WaitForExit(); Console.WriteLine($"Installer exited with code {p.ExitCode}"); // Optionally delete installer: try { File.Delete(destPath); } catch { } } else { Console.WriteLine("Failed to start installer process."); } return 0; } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); return 1; } } static Version GetLocalVersion() { // uses AssemblyFileVersion if present, otherwise AssemblyVersion var asm = Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly(); var fileVerAttr = asm.GetCustomAttribute<AssemblyFileVersionAttribute>(); if (fileVerAttr != null && Version.TryParse(fileVerAttr.Version, out var v1)) return v1; var ver = asm.GetName().Version ?? new Version(0, 0, 0, 0); return ver; } static bool TryParseVersion(string tag, out Version v) { v = null; if (string.IsNullOrWhiteSpace(tag)) return false; // strip leading 'v' or 'V' if (tag.StartsWith("v", StringComparison.OrdinalIgnoreCase)) tag = tag.Substring(1); // remove possible metadata after '-' (pre-release) or '+' var clean = tag.Split(new[] { '-', '+' }, 2)[0]; return Version.TryParse(clean, out v); } // Minimal release JSON shapes used class Release { public string tag_name { get; set; } public Asset[] assets { get; set; } } class Asset { public string name { get; set; } public string browser_download_url { get; set; } } static async Task<Release> GetLatestReleaseAsync() { using var http = new HttpClient(); http.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Updater", "1.0")); var url = $"https://api.github.com/repos/{Owner}/{Repo}/releases/latest"; using var resp = await http.GetAsync(url); if (!resp.IsSuccessStatusCode) return null; var json = await resp.Content.ReadAsStringAsync(); var opts = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; return JsonSerializer.Deserialize<Release>(json, opts); } static async Task DownloadFileAsync(string url, string destPath) { using var http = new HttpClient(); http.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Updater", "1.0")); using var resp = await http.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); resp.EnsureSuccessStatusCode(); using var stream = await resp.Content.ReadAsStreamAsync(); using var fs = new FileStream(destPath, FileMode.Create, FileAccess.Write, FileShare.None, 81920, true); await stream.CopyToAsync(fs); } }
הסקריפט עובד מצוין רק תזכור שהוא משווה את הגרסה שלו עצמו (בפרטים של הexe) מול הגיטהאב
@cfopuser אני לא צריך סקריפט
התוכנה עושה את זה מאחורי הקלעים
אבל מה שקורה זה שהתוכנה מורידה את העדכון ואז זה נכשל בגלל שהקובץ yml לא תואם
השאלה היא אם כל המוסיף גורע ואפשר לנסות להעלות את המתקין בלבד?ואם חייבים את הקובץ איך אני יוצר אפשרות פשוטה ליצור לו תעודה אמיתית (latest.yml)
או שיש פתרון אחר -
@cfopuser אני לא צריך סקריפט
התוכנה עושה את זה מאחורי הקלעים
אבל מה שקורה זה שהתוכנה מורידה את העדכון ואז זה נכשל בגלל שהקובץ yml לא תואם
השאלה היא אם כל המוסיף גורע ואפשר לנסות להעלות את המתקין בלבד?ואם חייבים את הקובץ איך אני יוצר אפשרות פשוטה ליצור לו תעודה אמיתית (latest.yml)
או שיש פתרון אחר@חכם-בלילה-1 כן תעלה את המתקין לבד זה עובד מצוין
וכול עוד אתה משתמש בhttps אין סיבה לחשוש לסכנה -
@cfopuser אני לא צריך סקריפט
התוכנה עושה את זה מאחורי הקלעים
אבל מה שקורה זה שהתוכנה מורידה את העדכון ואז זה נכשל בגלל שהקובץ yml לא תואם
השאלה היא אם כל המוסיף גורע ואפשר לנסות להעלות את המתקין בלבד?ואם חייבים את הקובץ איך אני יוצר אפשרות פשוטה ליצור לו תעודה אמיתית (latest.yml)
או שיש פתרון אחר -
@חכם-בלילה-1 כן תעלה את המתקין לבד זה עובד מצוין
וכול עוד אתה משתמש בhttps אין סיבה לחשוש לסכנה@cfopuser אוקיי תודה אני אבדוק את זה ואעדכן
חשבתי שהתעודה היא דרישת חובה(פשוט המאגר פרטי כרגע ואני מסתבך עם הטוקן...)
-
@cfopuser אוקיי תודה אני אבדוק את זה ואעדכן
חשבתי שהתעודה היא דרישת חובה(פשוט המאגר פרטי כרגע ואני מסתבך עם הטוקן...)
@חכם-בלילה-1 תשים קובץ פיקטיבי שמתקין קבצים ריקים רק כדי לראות אם זה רץ בכלל בספרייה פומבית
אגב אין סיבה לתייג 5 אנשים לבעיה אחת
-
@NH.LOCAL כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
התקנות inno עובדות עם קובץ בסיומת iss יעודי, לא עם yml.
@NH.LOCAL לא הבנתי במקום להעלות את ה-exe לגיטהאב עם yml
להעלות את זה עם הקובץ iss?
אבל הוא לא מהווה תעודה ואין בו את ההאש של הקובץ?
אולי נשאל מהתחלה בשביל עדכון דרך תוכנה חייבים קובץ אימות? אם כן איזה?@cfopuser כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
ואז זה בדיוק כמו inno installer
@cfopuser זה ממשק הרבה פחות מוצלח
יש אפשרות להכריח את אלקטרון ליצור מתקין כמו inno (או לפחות בעברית)?@חכם-בלילה-1 כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
@NH.LOCAL לא הבנתי במקום להעלות את ה-exe לגיטהאב עם yml
להעלות את זה עם הקובץ iss?
אבל הוא לא מהווה תעודה ואין בו את ההאש של הקובץ?
אולי נשאל מהתחלה בשביל עדכון דרך תוכנה חייבים קובץ אימות? אם כן איזה?אני מניח שפשוט לא הבנתי מה השאלה שלך
-
@חכם-בלילה-1 כן תעלה את המתקין לבד זה עובד מצוין
וכול עוד אתה משתמש בhttps אין סיבה לחשוש לסכנה@cfopuser כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
כן תעלה את המתקין לבד זה עובד מצוין
@cfopuser ניסיתי עכשיו התוכנה לא מוכנה להוריד עדכון בלי קובץ latest.yml
אין אפשרות להוריד עדכון דרך התוכנה בלי זה.@NH.LOCAL השאלה שלי זה איך אני יוצר את קובץ latest.yml שהוא בעצם תעודה על הגודל של הקובץ במתקין Inno?
כי באלקטרון הוא נוצר אוטומטית אבל ב-Inno לא, ובלי זה התוכנה לא מוכנה לגשת להוריד את העדכון -
@cfopuser כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
כן תעלה את המתקין לבד זה עובד מצוין
@cfopuser ניסיתי עכשיו התוכנה לא מוכנה להוריד עדכון בלי קובץ latest.yml
אין אפשרות להוריד עדכון דרך התוכנה בלי זה.@NH.LOCAL השאלה שלי זה איך אני יוצר את קובץ latest.yml שהוא בעצם תעודה על הגודל של הקובץ במתקין Inno?
כי באלקטרון הוא נוצר אוטומטית אבל ב-Inno לא, ובלי זה התוכנה לא מוכנה לגשת להוריד את העדכון@חכם-בלילה-1 איך אתה מעדכן (משהו שיצרת או משהו בנוי מראש)
אם זה משהו שיצרת (המעדכן) אין צורך בקובץ yaml אם זה משהו בנוי מראש אז מה זה ולמה זה צריך קובץ yaml
הנה לדוג' מעדכן אוטומטי שעשיתי למתקין אייבלוק (התוכנה לא האפליקצייה) זה משתמש בinno installer כדי לעדכן
-
@חכם-בלילה-1 איך אתה מעדכן (משהו שיצרת או משהו בנוי מראש)
אם זה משהו שיצרת (המעדכן) אין צורך בקובץ yaml אם זה משהו בנוי מראש אז מה זה ולמה זה צריך קובץ yaml
הנה לדוג' מעדכן אוטומטי שעשיתי למתקין אייבלוק (התוכנה לא האפליקצייה) זה משתמש בinno installer כדי לעדכן
@cfopuser יצרתי אפליקציה מסויימת באלקטרון
בניתי לה מערכת של עדכונים דרך גיטהאב
כל עוד ואני מעלה דרך הפקודה של npm run deploy או מעלה ידנית את הקובץ exe
ביחד עם הקובץ latest.yml העדכון עובדאבל אם אני מעלה מתקין של Inno התוכנה לא מוכנה לקחת את העדכון ובפענוח של הלוג לפי AI
הבעיה היא שחסר את הקובץ הזה (כלומר הקובץ latest.yml) מטא דאטה
השאלה היא איך אני מצליח לחתום אותו וליצור לו כזה קובץ או פתרון אחראיך אתה העלית לגיטהאב את המתקין inno?
תודה על המענה
-
@cfopuser יצרתי אפליקציה מסויימת באלקטרון
בניתי לה מערכת של עדכונים דרך גיטהאב
כל עוד ואני מעלה דרך הפקודה של npm run deploy או מעלה ידנית את הקובץ exe
ביחד עם הקובץ latest.yml העדכון עובדאבל אם אני מעלה מתקין של Inno התוכנה לא מוכנה לקחת את העדכון ובפענוח של הלוג לפי AI
הבעיה היא שחסר את הקובץ הזה (כלומר הקובץ latest.yml) מטא דאטה
השאלה היא איך אני מצליח לחתום אותו וליצור לו כזה קובץ או פתרון אחראיך אתה העלית לגיטהאב את המתקין inno?
תודה על המענה
@חכם-בלילה-1 תעלה ישירות לrelease
https://github.com/cfopuser/a-bloq-installer/releases/tag/v1.3.0.0
-
@חכם-בלילה-1 תעלה ישירות לrelease
https://github.com/cfopuser/a-bloq-installer/releases/tag/v1.3.0.0
@cfopuser זה מה שאני עושה
אבל האפליקציה (תוכנה) אלקטרון לא מוכנה לתקשר עם הקובץ
בלי תעודת האימות (הקובץ הנ"ל)זה באג רק באלקטרון בעדכון פנימי?
אני רואה שאצלך אין את הקובץ הזה בכלליש אפשרות באלקטרון למתקין בעברית?
-
@cfopuser זה מה שאני עושה
אבל האפליקציה (תוכנה) אלקטרון לא מוכנה לתקשר עם הקובץ
בלי תעודת האימות (הקובץ הנ"ל)זה באג רק באלקטרון בעדכון פנימי?
אני רואה שאצלך אין את הקובץ הזה בכלליש אפשרות באלקטרון למתקין בעברית?
@חכם-בלילה-1 אז בוא נפשט את הבעיה בדיוק אתה רוצה להוריד את המתקין על ידי קוד js ואז להריץ אותו על ידי אותו קוד כלומר השלב שאתה נכשל בו הוא להריץ את הexe
מה שאני חושד שקורא שהai עשה טעות בלטעון את הקובץ תוכל לשלוח רק את הקוד של העדכון כאן או בפרטי
או לחילופין לשאול צ'אט חדש האם הקוד תקין
הAI מבולבל בגלל שכאשר מעדכנים בelectron בדרך כלל משתמשים בelectron-updater שזה המעדכן שבא עם אלקטרון
ובשביל להשתמש בו צריך קובץ yaml אם אתה רוצה לעדכן אך ורק דרך הinno אין שום צורך בקובץ yaml -
@חכם-בלילה-1 אז בוא נפשט את הבעיה בדיוק אתה רוצה להוריד את המתקין על ידי קוד js ואז להריץ אותו על ידי אותו קוד כלומר השלב שאתה נכשל בו הוא להריץ את הexe
מה שאני חושד שקורא שהai עשה טעות בלטעון את הקובץ תוכל לשלוח רק את הקוד של העדכון כאן או בפרטי
או לחילופין לשאול צ'אט חדש האם הקוד תקין
הAI מבולבל בגלל שכאשר מעדכנים בelectron בדרך כלל משתמשים בelectron-updater שזה המעדכן שבא עם אלקטרון
ובשביל להשתמש בו צריך קובץ yaml אם אתה רוצה לעדכן אך ורק דרך הinno אין שום צורך בקובץ yaml@cfopuser כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
השלב שאתה נכשל בו הוא להריץ את הexe
@cfopuser השלב שאני נכשל בו זה להוריד את הקובץ אם אין את latest.yml
@cfopuser כתב בבקשת מידע | יצירת קובץ yml למתקין inno:
הAI מבולבל בגלל שכאשר מעדכנים בelectron בדרך כלל משתמשים בelectron-updater
נכון באמת ככה מוגדר לי דרך הספריה הזו