Bin Ordner Pfad herausfinden

Hallo,

Ich muss pg_dump.exe aus einer Applikation aufrufen können. Diese Applikation läuft auf verschiedenen Rechnern wo dieser Pfad unterschiedlich sein kann.

Gibt es eine Möglichkeit dieser Pfad herauszufinden? Z.B. innerhalb ein .bat File?

Vielen Dank

Dazu kannst Du which verwenden:

kretschmer@tux:~$ sudo ln -s /usr/bin/pg_dump /usr/bin/pg_dump.exe
[sudo] password for kretschmer:
kretschmer@tux:~$ which pg_dump.exe
/usr/bin/pg_dump.exe

Prüf halt mal, ob Deine Distribution sowas hat, falls nicht, halt nachinstallieren.


SCNR.

Andreas

Danke Andreas. Ich habe vergessen, dass es für Windows ist zu erwähnen. Und als es um Kunde PC geht, kann ich schlecht was nachträglich installieren.

Hubert

Mit CMD kann man auch suchen, wäre evtl. was dann für eine .bat-Datei

dir/s pgdump.exe

Danke. Ich kann es nicht jedes Mal machen (zu viel Zeit), aber es gibt mich weiteren Ideen.

Naja dann musst du analysieren wo die Datei liegt und dann die verschiedenen Pfade in deine Batchdatei eincodieren… Ist bei Linux nicht anderst. Dort wird halt per whereis gearbeietet und nicht über das dir…

cu tb.

Ja gute Idee. Danke an alle für den Beiträgen

/* Bestimmt das Postgres 8.3 "bin" 
    Sprache: Visual C/C++ 2008 */

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include "stdafx.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned char temp[MAX_PATH] = {NULL};    
    unsigned long size = sizeof(temp);
    string cstresult;

    /* In der Windows Registry den Postgres 8.3.x Service ImagePath abfragen */
    HKEY hKey;
        RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Services\\pgsql-8.3", &hKey);
        RegQueryValueEx(hKey, "ImagePath", NULL, NULL, temp, &size);
        RegCloseKey(hKey);

    /* unsinged zu char* */
    char *cast = reinterpret_cast<char*>(temp);
    cstresult = cast;

        string str = cstresult;
        string findstr("pg_ctl");
        string result;
        size_t found;

    /* Index ermitteln und von Zeichen 0 bis zum Offset ausgeben */
    found=str.find(findstr);
    if (found!=string::npos)
      result = str.substr(0,int(found)-1);    
      cout <<  result << endl;       
      return 0;
}

 

Ausgabe:

C:\projekte\callpgd\Debug>callpgd.exe
C:\Programme\PostgreSQL\8.3\bin

Damit kannst Du dann alles starten und stoppen was im bin
Verzeichnis so rumfliegt, am besten mit CreateProcess CreateProcess Function (Windows)

ps: Ich weiß zwar nicht mit was für einer Sprache Du arbeitest,
aber Du kannst das Projekt auch als native DLL kompilieren und
dann mit loadlib einbinden(z.B wenn dein Projekt VB.NET oder
C#.NET ist) LoadLibrary Function (Windows)


Gruß, Marc

@marc9022: Wenn man doch sowieso schon .Net verwende, wieso sollte ich dann erst eine DLL einbinden? Dann kann ich das ja gleich mit .Net realisieren. Gleiche gilt für das jede andere Sprache.

Es soll ja durchaus noch Leute geben die noch richtiges C/C++ und zwar native C/C++ programmieren und von .NET nicht das geringste halten. Postgres ist by the Way auch kein .NET Port (so wie die meisten ernst zu nehmenden Windowsprogramme) sondern ebenfalls native C/C++ und da Du mit C# auch native DLL’s einbinden kannst, wäre dies die einfachste Option gewesen. Du kannst es auch als C# rewriten, geht schneller und ist auch weniger komplex und für unerfahrene Programmierer bestimmt auch vorzuziehen.