exe datei mit anderen parametern speichern

09/01/2015 21:39 ComputerBaer#16
Dann solltest du denke ich eher die Lösung von kissein in betracht ziehen und einen Server haben der für deine Kunden die jeweilige exe erstellt. Das ist wahrscheinlich einfacher und sicherer.

Oder du denkst in die Richtung von warfley und legst deine Verbindungsinformationen in einer Ressourcendatei ab. Die scheinen sich von außen manipulieren zu lassen, das würde dann also auch gehen.

Den Wert einer Variable im Programm zu ändern würde ich eher vergessen. Falls es überhaupt möglich ist, wird das sehr kompliziert es. Eine einfache Lösung mit 10 Zeilen wirst du da kaum schaffen.
09/01/2015 23:23 tolio#17
strings in .net assemblies zu ändern ist kein problem wenn sie direkt als solche einkompiliert sind.
hier die holzhammer methode, besser wäre es natürlich sich schnell durch die metadaten zu hangeln um wirklich nur den eintrag im #US stream zu ändern, aber zum testen reichts.

Code:
        private static void Main(string[] args)
        {
            var targetFilePath = @"File.exe";
            var targetString = "SearchThis123";
            var newString = "NewString@©Æۊ";

            var fileBytes = File.ReadAllBytes(targetFilePath);

            var b = Encoding.Unicode.GetBytes(targetString);
            var newB = Encoding.Unicode.GetBytes(newString);

            if (b.Length != newB.Length)
            {
                throw new NotImplementedException("Padding etc...");
            }

            var index = IndexOf(fileBytes, b);
            Array.Copy(newB, 0, fileBytes, index, newB.Length);

            var s = Path.GetDirectoryName(targetFilePath) + "\\" + Path.GetFileNameWithoutExtension(targetFilePath) + "patched.exe";

            File.WriteAllBytes(s, fileBytes);
        }
die IndexOf funktion gibts hier: [Only registered and activated users can see links. Click Here To Register...]

wenn man etwas anderes als strings ändern will muss man im zweifel kreativer sein, aber auch sowas kann man machen.
09/02/2015 00:02 ComputerBaer#18
Gut, ich hatte mich da noch nicht mit befasst, aber ich denke ich verstehe was du da machst. Deutlich besser als bei dem Visual Basic Code ...

Die Möglichkeit einen String zu ersetzen erreicht ihre Grenzen dann, wenn der neue String länger als der vorhandene ist, dann ist es nicht möglich. Sehe ich das soweit richtig?
Bei kürzeren Strings muss man einfach mit Leerzeichen auffüllen und die dann bei der Ausführung des Programms einfach wegkürzen (trim). Wenn der String gleich lang ist gibt es kein Problem.

Man sollte die Strings also ungefähr so anlegen und muss beim Überschreiben genau wissen wie der Platzhalter aussieht. Außerdem geht es immer nur mit der ursprünglichen Datei, ein zweites Überschreiben ist unmöglich wenn man nicht den exakten neuen Inhalt kennt.
Code:
string var1 = "%Platzhalter1%                                                            ";
Bei etwas anderem als Strings könnte man es sich einfach machen und die Werte als String speichern und beim Programmstart dann in den richtigen Datentyp konvertieren. Brauch halt zwei statt einer Variable, aber das sollte ja kein Problem sein.

Doch, ich muss sagen das gefällt mir. Danke, da habe ich mal wieder was gelernt. Ob ich es brauchen werde ist eine andere Sache.