none
Umgebungsvariable in ShExecInfo.lpFile

    Frage

  • Guten Tag,

    ich möchte ein Programm per ShExecuteEx starten, in dessen Filenamen(ShExecInfo.lpFile) ich statt eines absoluten PATH eine Umgebungsvariable einsetzen kann. z.B. sei die Umgebungsvariable $HKKI, die auf einen Pfad zeigt, dann hätte ich gerne als parameter für ShExecInfo.lpFile = "$HKKI\filename.ext".

    Es gelingt mir nicht...??

    Vielen Dank im voraus

    hk

    Samstag, 24. November 2018 21:37

Antworten

  • Hallo,

    eine Umgebungsvariable kann mit _tgetenv_s (löst auf Unicode oder Multibyte Variante auf, gemäß DEFINE - getenv_s, _wgetenv_s) abgerufen werden.

    Zunächst die Größe ermitteln, dann den passenden Speicher reservieren und dann mit der gleichen Methode den Wert auslesen.

    TCHAR* strEnvVar = NULL;
    size_t siz_required;
    
    _tgetenv_s(&siz_required, NULL, 0, _T("EnvVariable"));
    
    if (siz_required > 0)
    {
    	strEnvVar = (TCHAR*)malloc(siz_required * sizeof(TCHAR));
    }
    
    int _errno;
    _get_errno(&_errno);
    if (_errno == ENOMEM || !strEnvVar)
    {
    ...
    	return;
    }
    
    _tgetenv_s(&siz_required, strEnvVar, siz_required, _T("EnvVariable"));
    Später den Speicher wieder freigeben.


    - Gruß Florian

    Montag, 26. November 2018 10:03

Alle Antworten

  • Hi,

    C++ ist nicht mein Gebiet, daher nur generell: Umgebungsvariablen werden unter Windows in der Regel mit %Variablenname% aufgelöst. Probier daher evtl. %$HKKI%. Ob das allerdings direkt über die Zuweisung zu IpFile funktioniert, weiß ich nicht. Zur Not müsstest Du die Variable zuerst auflösen und das Ergebnis dann bei der Zuweisung einsetzen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    • Bearbeitet Stefan Falz Sonntag, 25. November 2018 12:53
    Sonntag, 25. November 2018 12:28
  • Hallo,

    eine Umgebungsvariable kann mit _tgetenv_s (löst auf Unicode oder Multibyte Variante auf, gemäß DEFINE - getenv_s, _wgetenv_s) abgerufen werden.

    Zunächst die Größe ermitteln, dann den passenden Speicher reservieren und dann mit der gleichen Methode den Wert auslesen.

    TCHAR* strEnvVar = NULL;
    size_t siz_required;
    
    _tgetenv_s(&siz_required, NULL, 0, _T("EnvVariable"));
    
    if (siz_required > 0)
    {
    	strEnvVar = (TCHAR*)malloc(siz_required * sizeof(TCHAR));
    }
    
    int _errno;
    _get_errno(&_errno);
    if (_errno == ENOMEM || !strEnvVar)
    {
    ...
    	return;
    }
    
    _tgetenv_s(&siz_required, strEnvVar, siz_required, _T("EnvVariable"));
    Später den Speicher wieder freigeben.


    - Gruß Florian

    Montag, 26. November 2018 10:03