C++ Programm auf einem Pc ausführen der kein Compiler instlliert hat!
-
Simon2 schrieb:
Was aber nur geht, wenn Du das binary hackst .... wenn Du das kannst, brauchst Du aber kein "DLL-Unterschieben" mehr.
Mit dem "DLL-unterschieben" aber kannst Du ALLE Programme, die diese nutzen, hacken, ohne Dich mühsam durch alle Binaries zu buddeln und zwar über den ganz normalen Installationsweg.Der Aufwand ist meist nicht nötig; es gibt ja die Möglichkeit der DLL-Injektion. Aber da weichen wir vom Thema ab
Simon2 schrieb:
Viel skeptischer bin ich bei DLL-Benutzung aber nicht bzgl der Sicherheits-, sondern bzgl. der Kompatibilitätsaspekte. Bugfixes über eine neue DLL: Prima !
Aber bei Versionsänderungen verheddert man sich sehr leicht.Stimmt. Daher gibt es ja auch WinSxS, für jede Compilerrevision eine neue Version der RTL und die Angewohnheit, solche DLLs im Programmverzeichnis und nicht unter \system32 unterzubringen.
Außerdem zieht das Bugfix-Argument nur bedingt. Der durchschnittliche Benutzer würde sich vielleicht einen Bugfix beim Hersteller der Anwendung herunterladen, aber doch nicht eine neuere Version der RTL-DLL auf der Seite des Compilerherstellers.
-
audacia schrieb:
Simon2 schrieb:
Was aber nur geht, wenn Du das binary hackst .... wenn Du das kannst, brauchst Du aber kein "DLL-Unterschieben" mehr.
Mit dem "DLL-unterschieben" aber kannst Du ALLE Programme, die diese nutzen, hacken, ohne Dich mühsam durch alle Binaries zu buddeln und zwar über den ganz normalen Installationsweg.Der Aufwand ist meist nicht nötig; es gibt ja die Möglichkeit der DLL-Injektion. ...
Genau davon sprach ich doch....und das ist eben gar nicht notwendig, wenn man einfach direkt seine DLL auf's System schmeißen kann.Egal.
Gruß,
Simon2.
-
Du meinst mit "das binary hacken" DLL-Injection? Na dann...
-
audacia schrieb:
Du meinst mit "das binary hacken" DLL-Injection? ...
"DLL-Injection" ist für mich EINE Form von "binary hacken" (OK, ist ein wenig reißerisch formuliert, aber mir ist nichts Besseres eingefallen, zumal ich nicht nur Windows im Blick hatte). "Schön", wenn ein OS es zulässt, dass mit dem geladenen Prozess im Hauptspeicher zu tun, aber es ist ja nunmal nicht die einzige Möglichkeit.
Gruß,
Simon2.
-
Artchi schrieb:
Die CRT ist nämlich etwas essenzielles, das sollte eigentlich auf jedem PC drauf sein...
CStoll schrieb:
Zumindest die Release-Version der CRT...
... essenziell in diesem Sinne ist für mich exakt alles dass, was mit der
normalen Standard-Installation (Default-Einstellung) des Betriebssystems
auf dem Rechner landet, sonst nichts.Alles andere ist mein Bier, wenn ich eine Software entwickle und verteile.
Wenn die nun leider zusätzliche Bibliotheken benötigt, dann muß ich die
eben mitbringen bei der Installation - wie auch immer ich das löse.Artchi schrieb:
Ja mein Gott, der hat die CRT nicht drauf und muß sie installieren.
Macht ihr euch da nicht die Sache doch ein wenig zu einfach?
Hier nur mal ein kleines Beispiel - ganz passend zum Thema, habe ich zufällig in einem anderen Forum gefunden, unter:
http://www.tutorials.de/forum/c-c/301148-eckmaus-ein-kleines-konzept-c-zum-intelligenten-starten-von-anwendungen.htmlDort hat jemand stolz sein erstes C++ Programm gepostet, und ich hab's direkt mal runtergeladen und gestartet:
"Die Anwendung konnte nicht gestartet werden, weil CC3280MT.DLL nicht gefunden wurde."
"Neuinstallation der Anwendung könnte das Problem beheben."An der Fehlermeldung kann man schon gleich mal sehen, dass ich keine aktuelle Borland-IDE auf dem Rechner installiert habe.
Der zweite Teil der Fehlermeldung ist leider blanker Unsinn. Aber dafür kann natürlich keiner etwas, das ist eben der Standard-Fehlertext.
Nur wird eine Neuinstallation das Problem hier gerade nicht beheben, weil einfach die DLL im Package fehlt.Die muss sich der User dann eben halt besorgen - kann doch kein Problem sein. Was der "normale" Anwender an der Stelle machen würde, weiß ich nicht.
Allerdings glaube ich kaum, dass er direkt zu www.borland.com surfen wird. Woher sollte er auch wissen, dass er dort vielleicht die RTL finden kann?
(Kann euch aber beruhigen, findet er dort auch nicht. Jedenfalls nicht wenn er einfach nur nach "CC3280MT.DLL" sucht.)Der normale User würde wahrscheinlich einfach sagen "Schade, Programm runtergeladen - funktioniert aber nicht auf meinem Rechner".
Der etwas erfahrenere User würde vielleicht direkt mal probieren in Google nach "C3280MT.DLL" zu suchen.
... dort wird er dann zwar leider nicht wirklich die DLL finden,
... aber dafür einen Link zur Trial-Version des Entwicklerpaketes,
... und das wird er natürlich auch gleich runterladen, und sofort mal 'nen C++ Builder installieren,
... weil ihm ja augenblicklich klar wird, dass er dann vermutlich im Besitz der fehlenden RTL ist.
... und das alles wird er garantiert auch dann tun, wenn er mit dem C++ Builder selber, gar nix anzufangen weiß.
Wenn ihr nun immer noch eure Meinung so vertretet, wie ihr sie hier gepostet habt, dann solltet ihr genau so weitermachen.
Falls euch aber auch nur leiseste Zweifel kommen - wäre es vielleicht an der Zeit, einfach nochmal darüber nachzudenken.Grüße
napstix
-
Das statische linken ist hilfreich für kleinere 1file-Programme.
Gut, aber was ist, wenn man ein portables Programm hat, was auf dem USB-Stick laufen soll? Man kann doch nicht bei jedem Nutzer, bei dem man den Stick reindollt, die dlls nachladen!Deshalb sollte man, wenn man so ein Proggy hat, die DLL direkt beiliefern.
Aber woher weiß ich, welche DLL für welches Studio ist?
Kann ich dem Compiler sagen, er soll die DLL direkt in das Verzeichnis der Release kopieren? Wenn nicht, wie komme ich an die dll und woher weiß ich welche crts ich brauche?
-
Ehm, der User braucht doch nur die CRT installieren, wenn sie ihm fehlt. Spätestens beim starten oder installieren deiner Anwendung, bekommt er eine Fehlermeldung, das die CRT fehlt.
Ich weiss ned in was fuern umfeld Ihr programmiert, oder ob unsere Umgebung so der Exot ist, aber:
Unsere rechner werden zentral verwaltet. nen Installationsprogram ausfuehren ist nicht. Admin rechte, oder ueberhaupt Rechte um irgendwas zu installieren, gibts nur nach "Anfrage" und "Absegnung" des Verantwortlichen der Abteilung.Nur um mal so nen ueberblick zu verschaffen, was es "kosten" kann, die CRT zu installieren
Und jeder compiler, oder jede version bzw, jedes service pack, bringt ja nun wiederum neue CRT's mit.
Da werden exe's die ihre eigenen CRT's mitbringen richtig schick
Fuer unsere groessere Programme, klar schreiben wir auch setups, und da gibts die CRT auch als DLL, aber kritisiert wird regelmaessig, das das eingebettete MS Service update fuer die runtime unbedingt admin rechte haben will.
fuer kleine Progs, vorwiegend kommandozeilen programme, waer das nen ko kriterium ....
Ciao ...
-
XC++ schrieb:
Kann ich dem Compiler sagen, er soll die DLL direkt in das Verzeichnis der Release kopieren? Wenn nicht, wie komme ich an die dll und woher weiß ich welche crts ich brauche?
Einem Compiler kann man gewöhnlich nicht sagen, dass er etwas kopieren soll. Das kannst du deiner Entwicklungsumgebung sagen, indem du "Pre Build Steps" bzw. "Post Build Steps" definierst.
Man kann die Abhängigkeiten einer Assembly mit bestimmten Tools prüfen. Unter unixoiden Systemen wie Linux ist dafür normalerweise der Kommandozeilen-Befehl ldd vorinstalliert. Für Windows kann man sich das Tool Dependency Walker herunterladen, um die Abhängigkeiten zu überprüfen.
-
Lest euch doch einfach mal hier durch. Da steht eigentlich alles, was man wissen muß.