Laden...

Lässt sich C# Programm erstellen, das keine Framework-Voraussetzungen hat?

Erstellt von Cornflake vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.908 Views
C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 6 Jahren
Lässt sich C# Programm erstellen, das keine Framework-Voraussetzungen hat?

Hallo Leute

Ich suche eine Möglichkeit ein C# Programm zu erstellen (paketieren), das die unten genannten Features hat und nur durch einfaches kopieren in einen Ordner installiert wird.
Wichtig es darf kein bestimmtes installiertes .net Framework vorausgesetzt werden. Bzw. es dürfen keine weiteren Abhängigkeiten voraus gesetzt werden.

Folgende Features soll das Programm haben:

  • Es soll eine grafische Bedieneroberfläche anzeigen.
  • Es soll Dateien lesen und schreiebn können.
  • Es soll Berichte anzeigen (reportviewer).
  • Es soll Dateien packen können.
  • Es soll auf COM Ports zugreifen können.
  • Es soll Daten drucken können.
  • Es soll Linq unterstützen.

Aktuell ist ja .Net Core im kommen, das Self-contained deployments (SCD) unterstützt, nur schein dieses auch wieder native dependencies of .NET Core vorauszusetzen und es wird aktuell keine GUI Entwicklung mit unterstützt.

Am einfachsten wäre ein einfaches WinForms Programm, nur das setzt immer ein bestimmtes vorher installiertes .net Framework voraus. Schön wäre hier eine Packmöglichkeit, in der das verwendete Framework mit eingepackt wird.

Die .exe Datei darf auch dafür gerne Bytemäßig größer sein.

Habt ihr eine Idee?

Gibt es dazu in anderen Sprachen evtl. eine Lösung? Java, C++

Vielen Dank und Grüße
Cornflake

16.806 Beiträge seit 2008
vor 6 Jahren

Nein.

Stand heute wird bei .NET (C# ist nur eine Sprache) immer ein SDK oder Framework benötigt.
Es gibt kaum eine Runtime, die ohne SDK oder ganz ohne Abhängigkeiten auskommt.

709 Beiträge seit 2008
vor 6 Jahren

Wenn man sagt, dass es ab Windows Version x läuft, dann könnte man das mit der Version ausgelieferte .NET Framework als Voraussetzung nehmen und müsste, was das betrifft, nichts extra installieren.

Beim ReportViewer sehe ich allerdings schwarz.
Den muss man, wenn ich das richtig in Erinnerung habe, immer installiert haben bzw. separat installieren.

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 6 Jahren

Wäre sowas in reinem C++ möglich (kein .net C++)?
Mir ist gerade noch Elektron eingefallen, wäre das etwas oder müsste dazu auch irgendwas im Vorfeld installiert worden sein?

O
79 Beiträge seit 2011
vor 6 Jahren

Mir wäre jetzt noch Delphi eingefallen (Object Pascal ist die verwendete Sprache), das eine monolithische und dadurch ziemlich große EXE-Datei erstellt und von keiner Form von Framework abhängig ist (WinAPI lassen wir mal außen vor...) .

Aber beim ReportViewer ist hier auch Schluß, das geht nicht ohne DLLs, die nun mal zu installieren sind.

IMHO ist deine Anforderung heuer nicht mehr erfüllbar.

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 6 Jahren

Ok das mit dem Reportviewer muss ich dann wohl ausklammern.

Wäre es denn möglich z.B. auf einem Windows 7 System, dass das .net Framework 4.6.2 nicht installiert hat, dieses Framework z.b. einfach in einem Unterordner entpackt mitzuliefern und dann mit einem speziellen Aufruf die exe mit dem Framework zu starten?

Hab gerade gelesen, unter Java soll es möglich sein auf z.B. einem USB Stick die JRE entpackt mit drauf zu kopieren und dann eine Java Anwendung so direkt vom Stick startbar zu machen.

16.806 Beiträge seit 2008
vor 6 Jahren

Nein, weder die JavaScript-Welt noch die .NET Welt und erst recht nicht Java kommt ohne Dependencies aus.
Bei C++ kommt drauf an, was man nutzt, denn auch C++ hat teilweise Abhängigkeiten an SDKs.

Ich bezweifle, dass Du all Deine Anforderungen abgedeckt bekommst - bezweifle ich sehr.

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo Cornflake,

unter den o.g. Voraussetzungen bleibt eigentlich nur ein native Programm über, bei dem die Runtime statisch gelinkt wird. Z.B. C++. GUI, ReportViewer und Linq sind dann aber Mist bzw. nicht möglich.

Bei .net Core self contained sind unter Windows die "native dependencies of .NET Core" eigentlich nur die VC++ Runtime, der Rest (das Framework) wird beim Publish ausgegeben.

Um aber die Anforderung besser zu verstehen bzw. den Hintergrund:
Bei den aktuellen Windows-Installationen ist .net (Full) mit dabei, warum darf dieses nicht als Voraussetzung verwendet werden? Ich meine wenn es nicht dabei ist, so muss ein User das Deinstalliert haben und das sehe ich dann eher als Sonderfall an. Alle Eventualitäten lassen sich so nicht abdecken (geht nur mit native und statischem Linken, aber selbst dann gibt es die starre Abhängigkeit zu einem Target).

Ein Setup, das ggf. die Abhängigkeiten (nach-) installiert, wird auch ausgeschlossen? Kannst du da kurz begründen warum (Admin-Rechte, etc.) damit die zielgerichteter nach Lösungen gesucht werden kann.

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!"

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 6 Jahren

@gfoidl, das mit dem vorinstallierten .net framework hatte ich auch schon beim "Product Owner" angefragt, aber bis jetzt haben sich die Anforderungen nicht geändert.

Für den Hintergrund. Es soll eine Anwendung geschrieben werden, die ein Filialist auf seinen Rechnern ausführen kann. Das können u.a. reguläre Windows 7 PC sein, aber leider auch Windows XP oder POS Kassensysteme die aber eigentlich auch ein Windows haben sollten. Zur Verteilung wird dann von einem Server aus das Programm aus einem Netzlaufwerksordner heraus an die Systeme per kopieren verteilt. Es kann sein, dass die SW danach nicht mal mehr lokale Schreibrechte auf dem Rechner hat.
Daher bin ich aktuell schon am überlegen, die GUI vllt. als Webseite von einem Server aus auszuliefern.

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo Cornflake,

da würde ich auch -- wie du zuletzt schreibst -- an eine Webanwendung denken bzw. die Anwendung aufteilen.

  • Es soll eine grafische Bedieneroberfläche anzeigen => Web
  • Es soll Dateien lesen und schreiebn können => wie ist das genau gemeint?
  • Es soll Berichte anzeigen (reportviewer) => Web
  • Es soll Dateien packen können => wie ist das genau gemeint - ginge aber wohl auch via Web
  • Es soll auf COM Ports zugreifen können => C++ das per TCP mit Server kommuniziert
  • Es soll Daten drucken können => Web
  • Es soll Linq unterstützen. = > Web

So ungefähr würde ich das aufteilen, aber hängt natürlich von den genauen Anforderungen ab.

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!"

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 6 Jahren
Eigenen Webserverdienst aufsetzen

Danke Leute für eure Hinweise

@gfoidl Vielen Dank für deine konstruktiven Ideen.
Ja so in der Art müsste sich ein Großteil lösen lassen.
Dateien lesen schreiben und packen, würde ich dann von einem eigenen eingerichteten Webserver auf dem Filialistenserver mit Schreibrechten auf Netzlaufwerke übernehmen lassen.

Einzig der COM-Port Zugriff würde eine zusätzlichen SW auf dem Clientrechner benötigen.

Wegen Webserverdienst hatte ich zuerst an einen Apache gedacht. IIS wäre mir zu komplex. Aber gibt es da unter C# evtl. etwas abgespeckteres? So eine art embedded Webserverdienst, den ich in einem eigenen Programm verwenden kann?
Dann wüste ich auch unter C# wie ich Linq nutzen könnte. Bei Apache hätte ich dazu keine Ahnung.

16.806 Beiträge seit 2008
vor 6 Jahren

Der IIS ist bei weitem nicht so komplex wie ein Apache, der nur über Config Files oder Console bedient werden kann.
Und nein, Du brauchst allein aus Security-Sicht einen richtigen Webserver.

Eine Website ist viel komplexer als nur eine HTML-Datei.

Apache hat mit Linq auch absolut null am Hut.
Du vermischt hier sehr viel. Willst Du das nicht konstruktiv angehen, statt so chaotisch?
Ohne strukturiertes Vorgehen wirst Du gegen die Wand knallen - ungebremst.

849 Beiträge seit 2006
vor 6 Jahren

Du solltest aber auch bedenken, das auf solchen dann meist auch kein IE11 läuft.. sondern dann sowas wie IE6 kommt -> Reportviewer ist dann eher kritisch.. (aus eigener erfahrung)

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 6 Jahren

@abt, was wäre deiner Meinung nach der nächste konstruktive Schritt?

Ich bin noch am überlegen, evtl. den Webserver Dienst auf dem Server als Docker Anwendung zu verpacken, würde da IIS auch gehen? Habe selber dazu noch keine Erfahrung.
Bzw. was haltet Ihr von IIS Express?

16.806 Beiträge seit 2008
vor 6 Jahren

Der erste Schritt wäre, dass Du Dir das Zeugs mal anschaust, von was Du redest, bevor Du Theorien aufsetzt. Du brauchst Basics. Die fehlen Dir.
Denn so stocherst Du einfach nur rum.

Docker ist Linux, IIS gibt es aber nur auf Windows.
Es gibt aber auch Windows Container (mit Docker CLI, aber keine Docker Runtime).

Willst Du Docker, brauchst Du .NET Core und im Falle von ASP.NET Core und Kestrel eben nginx.

IIS Express ist ein Entwicklungswebserver und kein Produktivwebserver.
Les wenigstens mal 10 Minuten über die jeweiligen Technologien eigenständig nach.