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

1

24.07.2012, 15:06

Dateipfad in C++

Ich erstelle gerade einen kleinen
Launcher. Im großen und ganzen funktioniert er, nur jetzt hat sich ein
Problem herausgestellt. Und zwar nicht jeder hat die exe im gleichen
Pfad liegen.
Meine Button und die zugehörige Action schauen wie folgt aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    case WM_CREATE:
    {
        CreateWindow(TEXT("button"), TEXT("Play"),    
                    WS_VISIBLE | WS_CHILD ,
                    400, 230, 95, 95,        
                    hwnd, (HMENU) 1, NULL, NULL);    

        CreateWindow(TEXT("button"), TEXT("Updater"),    
                    WS_VISIBLE | WS_CHILD ,
                    300, 300, 80, 25,        
                    hwnd, (HMENU) 2, NULL, NULL);    
        break;
    }

      case WM_COMMAND:
      {
    if (LOWORD(wParam) == 1) {
        ShellExecute(GetDesktopWindow(), "open", "C:\\Programme\\Ada Online\\game\\Ada Online.exe", 0, 0, SW_SHOWNORMAL);
        PostQuitMessage(0);
    }

    if (LOWORD(wParam) == 2) {
        ShellExecute(GetDesktopWindow(), "open","C:\\Programme\\Ada Online\\Updater.exe", 0, 0, SW_SHOWNORMAL);
    }

    break;
    }
      


Habe gedacht ich kann das mit folgendem Pfad Lösen:

C-/C++-Quelltext

1
2
C:\\...\\Ada Online\\Updater.exe"
      

Aber dann findet er die exe nicht, den er
findet sie nur wenn ich den ganzen Pfad angebe. Gibt es eine andere
möglichkeit wie ich das Problem lösen kann?

Vielen dank für eure Hilfe

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

24.07.2012, 15:15

"C:\...\Ada Online\Updater.exe" <--- was soll das für ein Pfad sein?

Ist dein Launcher im selben Verzeichnis wie die anderen EXEs?

3

24.07.2012, 15:41

Ich habe damit Probiert einen relativen pfad zumachen. Ich weiß irgendwie habe ich das total falsch gemacht.
Ja sie sind im selben Verzeichnis. Auch im selben unterodner.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

24.07.2012, 15:42

Wie wärs mit einem einfachen "Updater.exe"?

5

24.07.2012, 15:48

Probiere icg gleich mal

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lajah250« (24.07.2012, 16:09)


Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

6

24.07.2012, 20:30

Pfad aus der Registry auslesen.
Eigentlich tragen sich alle Programme (die einen Installer haben) dort ein, und zwar immer im gleichen Pfad. Um den herauszufinden, empfiehlt es sich mit dem Registry Editor unter HKLM\Software, bzw. bei 32 Bit Software unter 64 Bit Windows HKLM\Software\Wow6432Node zu suchen.

Zum Nachschlagen der Windows API-Funktionen: http://msdn.microsoft.com/en-us/library/…1(v=vs.85).aspx

EDIT: Ups, ich dachte jetzt, dass du ein externes Programm, das nicht von dir ist ausführen willst.
Wenn das Problem nur beim Starten von Visual Studio aus auftaucht, ist vielleicht die Ursache, das die IDE das Verzeichnis der Solution/des Projektes zum Arbeitsverzeichnis des Programms macht, d.h. alle Pfade sind relativ dazu und nicht zu dem Ordner mit der .exe Datei.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

25.07.2012, 17:09

@Oberon:
Du hast das Problem glaube ich nicht wirklich verstanden;) Er weiß einfach nur nicht wie er einen relativen Pfad angibt, bzw wie dieser aussieht. Dein Hinweis ist aber sicherlich ganz nützlich, wobei ich mir nicht sicher bin ob er damit was anfangen kann. Aber wenn kann er ja noch mal fragen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

26.07.2012, 20:13

Stimmt ich kann nicht viel damit anfangen^^
Was für einen vorteil hat es damit, den Pfad aus der Regestry auszulesen?
Oder macht das keinen Unterschied zum Relativenpfad?

EDIT:
Gehört zwar nicht zu dem Thema, aber mir ist gerade eine allgemeine frage eingefallen.
Kann ich Elemente von meinen Fenster durch eine eigene Graphic ersetzen. Das zum Beispiel der Button dunkelrot mit ein paar verziehrungen ist. Und nicht grau wie jetzt. Und dies mit einer jpg, dds Datei bewerkstellige.
Allso ob das allgemein geht, oder ob ich mir das wieder besser aus den Kopf schlage.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lajah250« (26.07.2012, 20:23)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

9

26.07.2012, 20:27

Naja, ein Relativpfad funktioniert nur dann, wenn der Nutzer die auszuführende Datei immer an der selben Stelle relativ von der ausführenden Datei hat.

Beispiel:

Du programmierst dein Programm so, dass es eine Datei ".\.\Programm\bin\Programm.exe" ausgeführt wird.

Ist deine Datei "C:\Programme\MeineProgramme\Ausfuehren\AusfuehrendesProgramm.exe", und die andere "C:\Programme\Programm\bin\Programm.exe", geht alles glatt.
Liegt die Datei dann aber z.B. auf der Partition D:, bekommst du eine Fehlermeldung.

Das auszuführende Programm kann nun bei seiner Installation den Installationspfad in der Registry speichern, den dein Programm dann auslesen kann, wodurch es immer funktioniert ;)
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

10

26.07.2012, 20:34

Das kann man nicht direkt vergleichen: beides hat unterschiedliche Anwendungsgebiete.

Wenn du sicher weißt, wo das gesuchte Programm relativ zu deinem Programm liegt, benutze relative Pfade. Das ist auch viel einfacher, als den Pfad aus der Registry zu holen.

Die Registry brauchst du, wenn du ein anderes Programm starten willst, von dem du nicht weißt, wo es liegt. Wenn du zum Beispiel in deinem Launcher Programm X starten willst, dann kannst du nicht wissen, ob der User beim Installieren das Standardverzeichnis, z.B. C:\Programme\X ließ, oder es nach C:\Meine Spiele\X oder sonstwas installiert hat. Um es herauszufinden kann man bei den meisten Programmen in der Registry nachsehen.

Für den Anfang würde ich aber sowieso einfach direkt mit Pfaden (egal ob relativ oder absolut) arbeiten, denn die Registry ist schon ein Mehraufwand. Früher oder später wirst du bei der Programmierung mit der Windows API ohnehin noch einmal darauf stoßen.

Werbeanzeige