רגסטרי של קובץ COM #C
-
שלום וברכה.
אני כרגע עוסק באיזה פיתוח של תוכנת Winforms, שתעבוד עם אובייקטים של COM, כלומר תוכנה חיצונית שיש לה םספריה שדרכה אפשר לתקשר.
כבר יומיים אני עומד בבעיה זו:
במחשב שלי ששם מותקן הVisualStudio אין שום בעיה. אבל ברגע שזה נסגר ועובר למחשב אחר, התוכנה לא פועלת כלל. לאחר העיון ברשת נראה כי צריך לשנות את השמות של הקבצים שעוסקים בזה, במקרה הזה Resources for Visual Basic.tlb. שינוי ידני של סיומת הקובץ הזה לtlb.old גרם לכך שזה יעבוד אצל מחשבים אחרים גם כן.
מכיון שאני לא יכול לדרוש מכל מי שזה יהיה אצלו על המחשב ללכת ושנות שמות קבצים, אני מנסה לעשות את זה באופן תכנותי.
נסתי את הקוד הבא:var tlbfiles = Directory.EnumerateFiles(@"C:\Users\", "*.tlb", SearchOption.AllDirectories); foreach (string currentFile in tlbfiles) { string mewfile = (Path.GetDirectoryName(currentFile) + "\\" + Path.GetFileName(currentFile) + ".old"); File.Copy(currentFile, Path.GetDirectoryName(currentFile) + "\\" + mewfile + ".old", true); }
כלומר, לחפש בתקיה הזאת את כל קבצי הtbl ולהעתיק אותם באותו מקום עם השם החדש. משום מה לא נותן להעתיק לשם. וגם לא ליצור שם ספריות חדשות. עשיתי מעשה נועז והפעלתי את התוכנה כמנהל לא דרך הVS אלא ידני דרך הקובץ בספרית הדיבאג דרך סייר וינדוס, ושם הוא באמת נתן להוסיף ספריה אבל לא העתיק את הקובץ עם שינוי השם. אני ממש לא מבין מדוע זה לא יתכן, ואם זה בעיה של הרשאות מה אני אמור לעשות?
אחרי זה, הבנתי שאפשר לעשות רגסטרי לקובץ ע"י פקודה בCMD, וכתבתי את הקוד הבא:
Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.Arguments = "regtlibv12.exe " +currentFile; p.Start();
וכל מה שזה עושה הוא לפתוח את הקונסול, והוא מראה שהוא עומד בנתיב הזה של הקובץ ולא קורה כלום מעבר לכך.
שאלתי היא: איך אני יכול לבדוק אם באמת קרה משהו, הרי שם הקובץ לא התשנה אחרי זה, ויתכן שהוא באמת מאושר ברגסטרי.
והאם זו בכלל הדרך הנכונה לעשות כן? משהו אי פעם נתקל במשהו דומה ועשה משהו אחר או כיון אחר ?בתודה.
נתנאלפורסם במקור בפורום CODE613 ב09/06/2016 09:47 (+03:00)
-
ואו. זה היה חזק...
שישאר בינינו ברשת, אבל זה COM של אינדיזיין. כמה וכמה תכניות למשתשמי אינדיזיין ווינדוס ביחד .
הבעיה היא שזה לא עובד אצל אחרים אלא על ידי שינוי השם של הקבצים האלו. לי, מכיון שיש ויזואלסטדיו, כבר הכל מוכן ברגע שאני מיבא את הספריה. אבל אצל אחרים זה לא עובד בלי זה.
החומר של הCOM הזה ברשת הוא דל מאוד עד מחפיר, מכיון שרוב התוספים התכנותים מגיעים בצורת סקריפטים בגוואהסקריפט, אבל ליבי חפץ בוינפורמס, לדעתי אפשר להגיע עם זה לתצאות יפות מאוד הרבה יותר מגאווה סקריפט.
את הקטע הזה שצריך לשנות את סיומת הקובץ למדתי בStockOverflow את הדרך לעשות זאת עליתי על זה בעצמי. בלי קשר אני חושב שזאת הדרך לשנות סיומות קבצים.
יש למשהו אולי נסיון אם משהו דומה או בסגנון? מה אני אמור לעשות אם אין לי דרך אחרת או גישה לדרך אחרת?פורסם במקור בפורום CODE613 ב09/06/2016 12:28 (+03:00)
-
אני גם מזועזע כמו רחמים...
אני גם עבדתי בעבר עם אינדיזיין, והשתגעתי מחוסר תיעוד...
@נתנאלאת הקטע הזה שצריך לשנות את סיומת הקובץ למדתי בStockOverflow את הדרך לעשות זאת עליתי על זה בעצמי. בלי קשר אני חושב שזאת הדרך לשנות סיומות קבצים.
תן לינק לstackoverflow לקט של שינוי השם, חשוב לי לראות.
פורסם במקור בפורום CODE613 ב09/06/2016 12:45 (+03:00)
-
הקבצים המצורפים הם לאינדי לפי גרסא. צריך שיהיה מסמך פתוח באינדי לפני שמפעילים את זה.
זה לרסגטרי של הפעלה אקטבית - הדרך השניה שלי.וכאן זה הדרך הראשונה של שינוי השם:
indeTagCodeCS6.rar
indeTagCodeCS5.rarפורסם במקור בפורום CODE613 ב09/06/2016 13:01 (+03:00)
-
ממש כואב הראש.
לך על הדרך של הregtlibv12.
תכתוב ככה:var p = new Process(); p.StartInfo.Arguments = currentFile; p.StartInfo.FileName = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + "regtlibv12.exe"; if (!p.Start()) { //לא הצליח }
פורסם במקור בפורום CODE613 ב09/06/2016 19:20 (+03:00)