Laden...

Benutzer Programm generieren lassen

14 Antworten
2,145 Aufrufe
Letzter Beitrag: vor 15 Jahren
Benutzer Programm generieren lassen

Hallo,

ich habe einen kleinen Downloader entwickelt, den ich gerne Verteilen würde und suche momentan eine Möglichkeit, dass ein Benutzer das Programm abändern kann (mit jeweils einer geänderten Klasse, in der sich 3 "Konfigurationsvariablen" befinden)

Gibt es da eine Möglichkeit, eine Klasse nachträglich (mit overwrite) einzufügen?

Ein Beispiel für eine Klasse, die vom Benutzer "personalisiert" werden soll:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CanasCorpDownloader
{
    static class GVar
    {
        public static string source;
        public static string target;
        public static string nooffiles;
        public readonly static string gamename = "Daylight";
        public readonly static string gamexml = "http://ccload.cherrytree.at/dl/dl.xml";
        public readonly static string gameimageurl = "http://ccload.cherrytree.at/dl/UpdateHead.png";
    }
}

Hallo,

wieso denn das? Du kannst z.B. eine Konfigurationsdatei anlegen und beim Programmstart einlesen, Variable damit besetzen und fettich.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

Der Sinn des Programms ist es, dass mein Downloader abgeändert werden kann, damit andere RPG-Maker-Entwickler ihn benutzen können. Da wären offene Configs nicht so angebracht 😉

Hallo iAlex,

  • Du möchtest also, dass ein Entwikler (RPG Autor) deine *.exe einfach einem User gibt und dieser User dann das Programm (RPG) herrunter läd.
  • Damit es schön einfach ist soll alles in einer Datei (*.exe) drin sein.

Wenn das so ist:
Kommst du nicht um irgend eine Art der Änderung and der *.exe herrum (was immer irgend wie am besten als "compilieren" zu bezeichnen wäre).
Da gibt es viele möglich keiten, ich liste mal die auf, die mir einfallen (von einfach zu schwer):

  1. Neu Kompilieren (tjoa. 0815)
  2. Die neue Klasse in eine eigene *.dll kompilieren und diese *.dll und die *.exe mittels NETZ in eine *.exe vereinen (die *.exe muss die *.dll dann natürlich automatisch und ohne den *.dll-Namen zu kennen finden, gibt's aber alle schon hier im Forum (irgend wo))
  3. Resource-Datei in der *.exe "embedden" und diese Resouce-Datei dann in der *.exe ändern
  4. Den IL-Code der *.exe ändern (wird dann aber noch mal um ein Vielfaaches kompliziert wenn dann Sicherheit, Autentifizierung, Signierung und Co. mit ins Spiel kommen (gibt's aber auch hier im Fourm).

Aber trozt allem würde das ganze eh nur laufen, wenn eine CLR installiert ist (also unter Windows .NET).

Gruß
Juy Juka

Hallo iAlex,

  1. den Code per CodeDOM generieren und compilieren.

herbivore

  1. Resource-Datei in der *.exe "embedden" und diese Resouce-Datei dann in der *.exe ändern

Habe jetzt diesen Codeschnipsel gefunden, weiß da aber nichts mit anzufangen. Könnte mir das einer erläutern, wie ich die Funktion Nutze?

[DllImport("kernel32.dll", SetLastError = true)]
        static extern bool UpdateResource(IntPtr hUpdate, String lpType, String lpName, ushort wLanguage, IntPtr lpData, uint cbData);

warum nicht ein plug-in system ?
ein paar interfaces bereit stellen - und die exe scannt die plug-in dll nach den interfaces und ruft die dann einfach auf
wenn was neues kommt muss man nur soch eine plugin dll dazu packen und feddich

Weil das ganze programm eben nur aus einer .exe bestehen soll 😉
Es ist ja eine Art "Installer"

Kleiner Hinweis an dieser Stelle. Du könntest die Plugins auch an deine Exe "anhängen" (sie wären also in der exe mit drin) und beim Aufruf alle angehängten Dinge laden. Das geht auf jedenfall. Ich weiß grade nicht wie, aber dass es irgendwie ging weiß ich. Da wird dir hier bestimmt jemand helfen können 😉

„Heute back ich, morgen brau ich,
übermorgen cast ich die Königin nach int;
ach, wie gut dass niemand weiß,
dass ich Rumpelstilzchen heiß!“

"Bei Stylefragen sollteste nen Mac-User oder ne Frau fragen."

Der Sinn des Programms ist es, dass mein Downloader abgeändert werden kann, damit andere RPG-Maker-Entwickler ihn benutzen können. Da wären offene Configs nicht so angebracht 😉

Was spricht denn gegen Konfig-Daten, die binär und/oder verschlüsselt hinterlegt sind? Alles andere ist meiner Meinung nach mit Kanonen auf Spatzen geschossen...
Christian

Weeks of programming can save you hours of planning

Ein ähnliches Anliegen gab es mal hier: Selbstextrahierende Zip-Exe mit SharpZipLib ? das dürfte dann allerdings nicht mit signierten Assemblies funktionieren.

Was spricht denn gegen Konfig-Daten, die binär und/oder verschlüsselt hinterlegt sind? Alles andere ist meiner Meinung nach mit Kanonen auf Spatzen geschossen...
Christian

Nun es geht aber darum, dass ich nur eine verdammte exe-Datei versenden brauche. Halt wie eine Setup.exe.

Also benötigte ich nur eine Methode, die es mir erlaubt, einen String in Resources permanent zu ändern. (Bin halt leider zu doof für UpdateResource und weiß sowieso nix mit Pointern anzufangen 😉

Link angeschaut?? Da werden zwar keine Resourcen benutzt aber das sollte ja egal sein...

Hallo iAlex,

es wurden jetzt eigentlich genug Lösungen für dein Problem angegeben. Wenn du mit einer bestimmten Lösung nicht weiterkommst, dann nimm halt eine andere.

herbivore