Permalänk
Medlem

[C#] (wow liknande) Launcher?

Någon som har nån koll på vart man kan hitta mer info om hur man kan göra en Laucher som visar en "splash screen" och sedan laddar main app ifrån en DLL?

Launcher steg:
1) Kolla version på lokal applikations DLL (namn specad i XML config eller liknande)
2.1) Kollar URL / lokal sökväg (specad i XML config eller liknande), om ny version finns
2.2) Ladda hem och uppdatera applikations DLL filen.
3) Startas applikationen som finns i en DLL fil

Allt jag hittar med mina google skills är hur man refererar en DLL till en EXE för att sedan anropa den enkelt.. Det vet jag redan. Det jag försöker göra är att starta en "okänd" DLL (den måste så klart följa vissa regler för att kunna startas) genom att anropa en fördefinerad entry point. Sedan så körs applikationen med alla forms osv. som finns i DLL filen.

Visa signatur

Desktop: Ryzen 9 3950x | RTX 2060 | 16Gb RAM | 512Gb + 256Gb SSD
NAS: HP Microserver Gen8 | 8GB Ram | 3x2Tb ZFS | FreeNAS
SRV: HP ML350p Gen8 | 64GB Ram | 2x E5-2630v2 | ESXI

Permalänk
Medlem
Skrivet av McZ:

Någon som har nån koll på vart man kan hitta mer info om hur man kan göra en Laucher som visar en "splash screen" och sedan laddar main app ifrån en DLL?

Launcher steg:
1) Kolla version på lokal applikations DLL (namn specad i XML config eller liknande)
2.1) Kollar URL / lokal sökväg (specad i XML config eller liknande), om ny version finns
2.2) Ladda hem och uppdatera applikations DLL filen.
3) Startas applikationen som finns i en DLL fil

Allt jag hittar med mina google skills är hur man refererar en DLL till en EXE för att sedan anropa den enkelt.. Det vet jag redan. Det jag försöker göra är att starta en "okänd" DLL (den måste så klart följa vissa regler för att kunna startas) genom att anropa en fördefinerad entry point. Sedan så körs applikationen med alla forms osv. som finns i DLL filen.

Dold text

Om jag inte förstår fel nu så vill du starta en applikation som en splash, typ som när man startar spel och sånt, samtidigt ska den ladda ner en typ av "uppdatering" och sen köra?

Så länge main appen inte är startad och har reserverat .dll filen så ska det gå att skriva över den gamla med overwrite funktion och sen bara instansiera den nya formen
Hur långt har du kommit hittills på 1-3?

I program.cs kan du annars be Application.Run(?) att köra en annan form som genom en timer funktion stänger av sig själv men innan instansierar Form2.

Har jag förstått rätt med hur du menar att "köra" från en .dll?

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Om jag inte förstår fel nu så vill du starta en applikation som en splash, typ som när man startar spel och sånt, samtidigt ska den ladda ner en typ av "uppdatering" och sen köra?

Ja exakt, och anledningen till att ha huvud applikationen i en .dll är att man måste starta via Launchern

Skrivet av freddyfresh:

Så länge main appen inte är startad och har reserverat .dll filen så ska det gå att skriva över den gamla med overwrite funktion och sen bara instansiera den nya formen
Hur långt har du kommit hittills på 1-3?

Jag har inte börja än eftersom jag gillar att läsa/planera lite innan jag börjar Däremot har jag stora delar av main appen klar.

Skrivet av freddyfresh:

I program.cs kan du annars be Application.Run(?) att köra en annan form som genom en timer funktion stänger av sig själv men innan instansierar Form2.

Avslutas inte processen så fort den form som instancieras i Application.Run() stängs? eller kan jag köra Application.Run() igen efter den första?

static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frm_Splash()); // Show splash, update application.dll, load application dll IPluginForm f = LoadedApplicationPluginInterface; Application.Run(f.GetApplicationForm()); // Now run the application from the dll } }

Visa signatur

Desktop: Ryzen 9 3950x | RTX 2060 | 16Gb RAM | 512Gb + 256Gb SSD
NAS: HP Microserver Gen8 | 8GB Ram | 3x2Tb ZFS | FreeNAS
SRV: HP ML350p Gen8 | 64GB Ram | 2x E5-2630v2 | ESXI

Permalänk
Medlem

Wow Launchern är super simple och det är bättre att köra med samma metod. Dvs, du har två program, Launcher och Application. Launcher kollar helt enkelt vilken version av applikationen du har, sedan startar den genom System.Diagnostics.Process.Start().

Eftersom du vill ha programmet i en dll är det lättast att bara ha en executable som referera till den dll filen, lite som en genväg. Annars borde du kolla på System.AddIn som låter dig ladda plugins/dlls på en annan domæn æn sjævla huvud applikationen.

Edit: Missade kravet i ditt andra inlägg. Jag hade nog rekommenderat att du kör på System.AddIn eller kanske MEF för att hantera laddningen av huvudprogrammet.

Permalänk
Medlem

För att läsa in Dll'er dynamiskt i C# så använd Assembly.LoadFrom ( http://msdn.microsoft.com/en-us/library/system.reflection.ass... )

Med hjälp av den kan du alltid instansiera upp ett interface från den och sedan exekuta den metoden som gör allt annat.

För att försäkra dig om att din assembly är din och inte modifierad så har du bland annat http://msdn.microsoft.com/en-us/library/dd413993.aspx

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift