Laden...

Wie automatisch mehrere Exe-Dateien aus einem Projekt erstellen und individuelle Variable setzen

Erstellt von Aerics vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.889 Views
A
Aerics Themenstarter:in
7 Beiträge seit 2009
vor 7 Jahren
Wie automatisch mehrere Exe-Dateien aus einem Projekt erstellen und individuelle Variable setzen

Einen schönen guten Morgen zusammen.

Ich habe folgende Anforderung und Problem bei dessen Umsetzung:

Es existiert ein Projekt/Programm. Innerhalb dieses Projektes gibt es eine String-Variable "Key".
Nun habe ich z.B. drei Kunden, für welche ich das Programm compiliere. Wichtig hierbei ist, dass jeder Kunde eine Exe mit einem individuellen Key erhält.

Sprich, ziel soll es sein, dass wenn ich auf Build Project klicke, in drei unterschiedliche Verzeichnisse jeweils eine Exe erstellt wird und beim Erstellungsprozess jeweils ein unterschiedlicher Wert der Key-Variable zugewiesen wird.

Ist dies möglich? Und wenn ja, wie?
Ich habe schon etwas gegoogelt und sogenannte pre build event gefunden. Aber nichts passendes, wie ich eine Variable setze, welche im Quellcode bereits vorhanden ist und dann eben auch 3 exe Dateien erstellt.

Danke für eure Hilfe.

16.842 Beiträge seit 2008
vor 7 Jahren

Kannst Du noch kurz über den Zweck was sagen?
Das hört sich aktuell nach einer Art Seriennummer oder ein Lizenzschlüssel an, was man so eher nicht macht.

Aus Build sicht hätte man im Quellcode einen Platzhalter, den man dann über einen Build-Task vor dem eigentlichen Kompilieren mit einer Konstante ersetzt.
In Visual Studio Team Services gibt es dafür extra Erweiterungen, wie zB. Replace Tokens.

Lokal müsstest Du das vorher über ein PowerShell-Script umsetzen, wobei in VSTS auch nichts anderes passiert.
Das Script selbst ist Open Source und arbeitet mit Umgebungsvariablen von VSTS.

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Aerics,

Lokal müsstest Du das vorher über ein PowerShell-Script umsetzen

Muss nicht Powershell sein.
Wie du schon bemerkt hast, kannst du das PreBuild Event verwenden od. dich ins (mächtigere) MsBuild einhaken. Dort kannst du so gut wie alles beeinflussen und ändern -- ob dies dann per Powershell-/Batch-Script od. Build-Task erfolgt hängt vom Umfang, etc. ab.

Bzgl. Serial hat Abt ja schon einen Hinweis gegeben.

Nun habe ich z.B. drei Kunden, für welche ich das Programm compiliere. Wichtig hierbei ist, dass jeder Kunde eine Exe mit einem individuellen Key erhält.

Wenn es tatsächlich wenige Kunden sind, so könntest du für jeden Kunden eine eigene Build-Configuration ertellen und dort auch Symbole für die bedingte Kompilierung angeben.
Mittels Batch-Build kannst du dann für alle Kunden die EXE einfach erstellen lassen.

Bei mehreren, so dass es mit den eigenen Build-Configurations unhandlich wird, würde ich mich dann im Build-Vorgang einhaken.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.825 Beiträge seit 2006
vor 7 Jahren

Ich kompiliere auch individuell pro Kunde.

Ich schreibe den Lizenzcode direkt in den Sourcecode und kompiliere dann dreimal per Batchdatei, bei 3 Kunden.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

A
Aerics Themenstarter:in
7 Beiträge seit 2009
vor 7 Jahren

Schon mal danke für die schnellen Antworten.

Hintergrund ist, dass das Programm einen fest hinterlegten String zum Verschlüsseln benutzt.
Ich möchte jedoch, dass jeder Kunde einen eigenen Verschlüsselung-Key hat. Ungern möchte ich diesen frei leserlich in einer Konfig-Datei hinterlegen, sondern einfach fest im Code.

Hat denn jemand ein kleines Beispiel, wie genau ich z.B. zwei mal eine Variable Key überschreibe und dann jeweils eine Exe compiliere?
Klick hier schon rum, aber bekomme es nicht hin 😦

16.842 Beiträge seit 2008
vor 7 Jahren

.. und der Kunde kann im Ernstfall den Key nicht einfach selbst setzen?
Das ist schon nen ziemliches Risiko.....gerade wenns um Verschlüsselung von etwas geht.

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Aerics,

im Anhang ein Beispiel für die bedingte Kompilierung. Schau dir da die Projekteinstellungen an.

einen fest hinterlegten String zum Verschlüsseln

Mit Reflectoren wie ILSpy, etc. ist es somit aber leicht den Key auszulesen. Auch kann der Algorithmus zur Verschlüsselung so leicht ermittelt wird...kurz dieses Verfahren ist nicht sicher -- außer vllt. gegenüber DAUs.

Sicherer wäre es wenn du mit der Anwendung ein Zertifikat verteilst, das zur Verschlüsselung verwendet wird.
Sonst schau mal ob du in der Forensuche, da ähnliche Probleme (Lizenzschlüssel, etc.) schon öfters behandelt wurden, etwas für dich passendes findest.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

16.842 Beiträge seit 2008
vor 7 Jahren

Uff, mit solchen Bedingungen würde ich das nicht machen.
Dann 1000x lieber und sicherer über Build Variablen....dafür sind sie da.

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Abt,

bei 3 Kunden ist das noch vertretbar. Wenns mehr sind, so würde ich das auch anders machen -- wie oben geschrieben.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.003 Beiträge seit 2006
vor 7 Jahren

Sicherer wäre es wenn du mit der Anwendung ein Zertifikat verteilst, das zur Verschlüsselung verwendet wird.

Meiner Meinung nach das einzig vernünftige Vorgehen. Auf die Weise schalten wir kundenindividuell Programmteile frei/ab. Selbst mit Buildskript ist das sonst schlicht nicht in angemessener Zeit machbar, zumal man theoretisch jeden einzelnen Build nochmal durch's QM jagen müsste.

Wenn man nicht mit steigender Kundenzahl steigenden Aufwand haben will, bleibt nicht viel anderes übrig. (Szenarien wie zB bei BerndFfm sind natürlich noch per Skript handlebar.)

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)