Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Gelöschter Benutzer

unregistriert

1

03.03.2014, 15:59

[C++] .exe geht nicht im Programme Ordner

Hallo,

leider habe ich ein Problem mit meiner in VS Express 2013 erstellten .exe Konsolenanwendung. Diese baut auf die SFML 2.1 auf und funktioniert einwandfrei, im Debug als auch im Release-Modus. Nun habe ich ein InnoSetup geschrieben, welches alle Dateien mit der .exe beinhaltet. Das Setup funktioniert einwandfrei. Nun habe ich allerdings das Problem, wenn ich in den "Programme" oder "Programme (x86)" Ordner installiere (alle anderen Ordner und Verzeichnisse funktionieren), folgender Fehler kommt:


(Link)


Deshalb hatte ich vermutet, dass Inno die .exe-Datei beim kompilieren irgendwie beschädigt hat, deshalb hatte ich sie "manuell" nochmal ausgetauscht (mit der aktuellen Releaseversion). Leider kam dabei derselbe Fehler. Sämtliche .dll's und Co. sind installiert oder liegen dem Verzeichnis bei. Also dachte ich mir, liegt es vielleicht an meinem Betriebssystem (Win8 64bit), vielleicht habe ich irgendeine Einstellung verkorkst. Also startete ich meine virtuelle Maschine (Windows 7 64bit), leider auch ohne Erfolg (Redistributable ist installiert, 2012 weil 2013 nicht funktioniert). Die Bing-Suche brachte leider auch keinen Erfolg, alles was ich fand waren verwirrte XP-Nutzer die sich über die zwei Ordner gewundert haben. Auch der Tipp, die Redistributable zu installieren, wurde von mir oft gefunden, allerdings hatte ich diese ja installiert. Leider bin ich im Moment total ratlos, ich würde mich über jede Antwort freuen.

Mit freundlichen Grüßen,

alex41018

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

03.03.2014, 16:08

Was versucht dein Programm denn zu machen? Vielleicht versucht es ja im Ausführungsverzeichnis Dateien anzulegen oder schreibend zu öffnen.
Passiert das gleiche auch in anderen Ordnern? Passiert das gleiche auch mit einem anderen Ausführungsverzeichnis?
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Gelöschter Benutzer

unregistriert

3

03.03.2014, 16:21

Ich versuche mal die Fragen mit meinem Wissen so gut wie möglich zu beantworten: Das Programm ist ein Spiel. Ich greife hierbei auf die SFML 2.1 zurück. Da die Map, usw. nach schließen des Programmes gespeichert werden sollen, verwende ich hierfür mehrere ini-Dateien. Diese befinden sich im Verzeichnis der .exe, bzw. in deren Unterordnern. Der Fehler tritt auf bevor das SFML-Fenster erscheint (was fasst als erstes geschieht). Das Programm besteht aus momentan 1 Thread. Ich hoffe das hilft schon mal weiter, leider ist mir nicht ganz klar, was das Ausführungsverzeichnis sein soll. Vielen Dank!

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

03.03.2014, 16:31

Das Ausführungsverzeichnis ist das Verzeichnis, in dem das Programm ausgeführt wird.
Für Windows: Führst du die Anwendung direkt über den Explorer aus, ist es auch das Verzeichnis, in dem die ausführbare Datei liegt. Führst du sie über eine Verknüpfung aus, ist das Verzeichnis für die Verknüpfung konfigurierbar. Führst du sie über die Konsole aus, ist es das aktuelle Verzeichnis.

Was ist in deinem Fall "die Map"?
Ist es etwas statisches? Dann kann es im Programmverzeichnis liegen bleiben.
Ist es etwas Benutzerspeziefisches (bspw. eine Art Spielstand)? Dann sollte es auch benutzerspeziefisch (im Benutzerverzeichnis) abgelegt werden.

Sehr wahrscheinlich liegt es an einem schreibenden Zugriff auf das Programmverzeichnis, da darin nur ein Administrator Schreibrechte besitzt.
Und deshalb hatte ich die Frage gestellt, ob die Anwendung sich auch dann fehlerfrei ausführen lässt, wenn sie in einem anderen Verzeichnis liegt.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Gelöschter Benutzer

unregistriert

5

03.03.2014, 17:05

Vielen Dank für deine Antwort! Also: die .exe liegt im "Programme (x86)" Ordner (Festplatte C). Egal ob ich die Anwendung über Verknüpfung oder Explorer aufrufe, der Fehler bleibt bestehen. Die Map ist eine Tilemap. Die Tilemap wird mit einer verketteten Liste gespeichert. Die einzelnen Tiles werden in der ini-Datei im Verzeichnis "C:\Program Files (x86)\Anwendung\Anwendung\Save\map.ini" gespeichert (ich habe zweimal den Ordner "Anwendung", damit alles strukturierter ist, die .exe liegt dort: "C:\Program Files (x86)\Anwendung\Anwendung\Blabla.exe"). Die Anwendung lässt sich in anderen Verzeichnissen problemlos ausführen (hatte ich ihm ersten Post bereits geschrieben). Ich bin als Administrator an meinem Laptop angemeldet.
Mit freundlichen Grüßen,
alex41018

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

03.03.2014, 17:38

Vielen Dank für deine Antwort! Also: die .exe liegt im "Programme (x86)" Ordner (Festplatte C). Egal ob ich die Anwendung über Verknüpfung oder Explorer aufrufe, der Fehler bleibt bestehen.
Eine Verknüpfung würde hier nur dann einen Unterschied machen, wenn für diese ein anderes Ausführungsverzeichnis (außerhalb von C:\Programme) eingestellt werden würde und in dem Ausführungsverzeichnis die benötigten Dateien vorhanden wären.

[Die Map wird] im Verzeichnis "C:\Program Files (x86)\Anwendung\Anwendung\Save\map.ini" gespeichert
Ist die Map ein statischer Inhalt? Wenn ja, dann kann sie im Programmverzeichnis liegen bleiben, wenn nein (bspw. weil sie dynamisch generiert wird), dann sollte sie an anderer Stelle liegen (unterhalb des Benutzerverzeichnisses).

(ich habe zweimal den Ordner "Anwendung", damit alles strukturierter ist, die .exe liegt dort: "C:\Program Files (x86)\Anwendung\Anwendung\Blabla.exe")
Ich wüsste nicht, in wie weit das für mehr Struktur sorgen soll. Würdest du Verzeichnisnamen wie "C:\Programme\<Entwickler>\<Spiel>\" verwenden, wäre es nicht unsinnig, das Spiel nicht direkt in das Verzeichnis zu legen, aber bei einem "C:\Programme\<Spiel>\<Spiel>\" macht die Dopplung keinen Sinn.

Die Anwendung lässt sich in anderen Verzeichnissen problemlos ausführen (hatte ich ihm ersten Post bereits geschrieben).
Das ging für mich nicht eindeutig aus dem Beitrag hervor, weshalb ich das nochmal explizit wissen wollte.

Ich bin als Administrator an meinem Laptop angemeldet.
Wahrscheinlich bist du grundsätzlich als ein normaler Benutzer unterwegs, kannst aber solchen Anwendungen, die nach mehr Rechten fragen, diese auch erteilen. Da deine Anwendung sehr wahrscheinlich nicht nach mehr Rechten fragt, aber dennoch Aktionen (schreibender Zugriff auf Dateien in einem Verzeichnis, auf welches nicht schreibend zugegriffen werden kann) ausführen will, für die das erforderlich ist, stürzt sie einfach ab.


Ich schreibe es zur Sicherheit nochmal:
Meine Vermutung ist, dass der Fehler durch nicht Berechtigte Schreiboperationen im Programmverzeichnis ausgelöst werden. Dateien, die vom Programm verändert werden, müssen grundsätzlich in einem anderen Verzeichnis liegen. (Häufig ist das richtige Verzeichnis dafür ein benutzerspeziefisches Verzeichnis, da die Daten auch benutzerspezifisch sind.)

Sollte der Fehler an anderer Stelle liegen, solltest du gucken, wie du den Fehler eingrenzen kannst. Ich helfe zwar gerne, aber so müsste ich für jede weitere Vermutung erst einige Nachfragen stellen, um zu sehen, ob diese zutreffen kann, Anpassungsmöglichkeiten vrschlagen und erfragen/abwarten, ob diese Änderungen den Fehler behoben haben.
Im Hintergrund ist eine Konsole zu sehen. Du könntest bspw. einfach in dieser etwas ausgeben und anhand der Ausgaben gucken, vor welchem Befehl das Programm abstürzt.
Du könntest die Situation auch grob nachstellen, indem du für das Debuggen das Programm (bzw. dessen Ausführung) so anpasst, dass die Dateien (die Maps) aus dem Programmverzeichnis bezogen werden, in welchem du die Anwendung bei dir derzeit nicht zur Ausführung bringen kannst.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Gelöschter Benutzer

unregistriert

7

03.03.2014, 18:02

So wie es aussieht, habe ich den Übeltäter gefunden (wenn es der letzte war): fprintf. Dieser ist Teil der Logfile Funktion Textout von "C++ für Spieleprogrammierer". Zum Verständnis die ganze Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
// Textout
//
// Aufgabe: Text ins Logfile schreiben (schwarz)
//
void CLogfile::Textout(const char *Text)
{
    // Text schreiben und flushen
    [b]fprintf(m_Logfile, Text);[/b]
    fflush(m_Logfile);

} // Textout (schwarz)


Leider habe ich keinen Plan, wie ich diesen Fehler umgehen kann. Ich werde noch Bing verwenden, glaube aber kaum, dass ich bei solch einem Fehler irgendeine passende Antwort finde. Deshalb wollte ich euch um eure Hilfe bitten.

Mit freundlichen Grüßen,

alex41018

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

8

03.03.2014, 18:13

Wahrscheinlich wird die Logdatei bei dir im gleichen Verzeichnis, wie die Anwendung selbst gespeichert. Es waren also nicht die Mapdateien, aber dennoch das Schreiben ins Programmverzeichnis.
Die Lösung bleibt die gleiche: Speicherung der Daten in einem anderen (benutzerspeziefischen) Verzeichnis.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

9

03.03.2014, 18:24

Ich frage mich ja warum du überhaupt einen Installer erstellst und nicht einfach alles was du brauchst in ein Zipfile packst und gut ist.
Ein Installer macht doch nur dann Sinn, wenn er wirklich irgendwas installiert...

Werbeanzeige