Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problem beim Ermitteln des Ordners der verknüpften Anwendung

6 views
Skip to first unread message

peter...@live.de

unread,
Jun 19, 2011, 6:04:02 AM6/19/11
to
Hallo,

ich m�chte mit diesen VB.NET-Zeilen den Ordner ermitteln, der die mit einer
Dateiendung verkn�pfte exe enth�lt. Das verkn�pfte Programm l��t sich
problemlos ermitteln, aber wenn ich mit dieser Pfadangabe den Ordner des
Programms mit GetDirectoryName ermitteln will, kommt der Fehler es w�re ein
illegales Zeichen im Pfad.

Danke Peter

Private Declare Function FindExecutable Lib "shell32.dll" Alias
"FindExecutableA" ( _
ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As
String) As Long

Public Shared Function GetVerknuepftesProgrammOrdner(ByVal endung As String)
As String
Dim _exe As String = New String(" "c, 255)
Dim _datei As String = (My.Computer.FileSystem.GetTempFileName + "." +
endung)
Dim _swr As System.IO.StreamWriter = System.IO.File.CreateText(_datei)
_swr.Write("")
_swr.Close()

FindExecutable(_datei, vbNullString, _exe)
_exe = _exe.Trim
Kill(_datei)
Return IO.Path.GetDirectoryName(_exe)

End Function

Armin Zingler

unread,
Jun 19, 2011, 9:50:58 AM6/19/11
to
Am 19.06.2011 12:04, schrieb peter...@live.de:
> Hallo,
>
> ich m�chte mit diesen VB.NET-Zeilen den Ordner ermitteln, der die mit einer
> Dateiendung verkn�pfte exe enth�lt. Das verkn�pfte Programm l��t sich
> problemlos ermitteln, aber wenn ich mit dieser Pfadangabe den Ordner des
> Programms mit GetDirectoryName ermitteln will, kommt der Fehler es w�re ein
> illegales Zeichen im Pfad.
>
> Danke Peter

Wenn du dich nicht auf die Ausf�hrung als 64-Bit-Prozess beschr�nken willst,
dann musst du als R�ckgabetyp IntPtr verwenden:


Private Declare Auto Function FindExecutable Lib "shell32.dll" ( _
ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As IntPtr


Im �brigen, wenn du keinen StringBuilder als Out-Parameter verwendest, dann
musst du selbst bis zum Chr(0) abschneiden. Trim entfernt nur Leerzeichen.

Public Shared Function GetVerknuepftesProgrammOrdner(ByVal endung As String) As String
Dim _exe As String = New String(" "c, 255)

Dim _datei As String = IO.Path.GetTempFileName + "." + endung


Dim _swr As System.IO.StreamWriter = System.IO.File.CreateText(_datei)
_swr.Write("")
_swr.Close()

FindExecutable(_datei, Nothing, _exe)
_exe = _exe.Substring(0, _exe.IndexOf(Chr(0)))
IO.File.Delete(_datei)
Return IO.Path.GetDirectoryName(_exe)

End Function

Da Microsoft den eigenen Newsgroup-Support vor �ber einem Jahr eingestellt
hat, solltest du zuk�nftig Fragen an de.comp.lang.dotnet.vb richten.

--
Armin

peter...@live.de

unread,
Jun 19, 2011, 12:37:46 PM6/19/11
to
Vielen Dank Armin (auch f锟絩 den NG-Hinweis)
Peter


"Armin Zingler" schrieb im Newsbeitrag
news:966d7h...@mid.uni-berlin.de...

Am 19.06.2011 12:04, schrieb peter...@live.de:
> Hallo,
>

> ich m锟絚hte mit diesen VB.NET-Zeilen den Ordner ermitteln, der die mit
> einer
> Dateiendung verkn锟絧fte exe enth锟絣t. Das verkn锟絧fte Programm l锟斤拷t sich


> problemlos ermitteln, aber wenn ich mit dieser Pfadangabe den Ordner des

> Programms mit GetDirectoryName ermitteln will, kommt der Fehler es w锟絩e

> ein
> illegales Zeichen im Pfad.
>
> Danke Peter

Wenn du dich nicht auf die Ausf锟絟rung als 64-Bit-Prozess beschr锟絥ken willst,
dann musst du als R锟絚kgabetyp IntPtr verwenden:


Private Declare Auto Function FindExecutable Lib "shell32.dll" ( _
ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As
String) As IntPtr


Im 锟絙rigen, wenn du keinen StringBuilder als Out-Parameter verwendest, dann


musst du selbst bis zum Chr(0) abschneiden. Trim entfernt nur Leerzeichen.

Public Shared Function GetVerknuepftesProgrammOrdner(ByVal endung As
String) As String
Dim _exe As String = New String(" "c, 255)
Dim _datei As String = IO.Path.GetTempFileName + "." + endung
Dim _swr As System.IO.StreamWriter = System.IO.File.CreateText(_datei)
_swr.Write("")
_swr.Close()

FindExecutable(_datei, Nothing, _exe)
_exe = _exe.Substring(0, _exe.IndexOf(Chr(0)))
IO.File.Delete(_datei)
Return IO.Path.GetDirectoryName(_exe)

End Function

Da Microsoft den eigenen Newsgroup-Support vor 锟絙er einem Jahr eingestellt
hat, solltest du zuk锟絥ftig Fragen an de.comp.lang.dotnet.vb richten.

--
Armin

Wolfgang Badura

unread,
Jun 20, 2011, 3:08:19 AM6/20/11
to
Hallo Armin!
"Armin Zingler" <az.n...@freenet.de> schrieb im Newsbeitrag
news:966d7h...@mid.uni-berlin.de...

> Am 19.06.2011 12:04, schrieb peter...@live.de:
>> Hallo,
>>
>> ich m�chte mit diesen VB.NET-Zeilen den Ordner ermitteln, der die mit
>> einer
>> Dateiendung verkn�pfte exe enth�lt. Das verkn�pfte Programm l��t sich
>> problemlos ermitteln, aber wenn ich mit dieser Pfadangabe den Ordner des
>> Programms mit GetDirectoryName ermitteln will, kommt der Fehler es w�re
>> ein
>> illegales Zeichen im Pfad.

>


> Private Declare Auto Function FindExecutable Lib "shell32.dll" ( _
> ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult
> As String) As IntPtr

Das geht auch mit der API

' pszAssoc mu� mit "." beginnen
Declare Function AssocQueryString Lib "shlwapi.dll" Alias _
"AssocQueryStringA" (ByVal flags As ASSOCF, ByVal str As ASSOCSTR, _
ByVal pszAssoc As String, ByVal pszExtra As String, _
ByVal pszOut As String, ByRef pcchOut As Long) As Long

und dann

ret = AssocQueryString(0, ASSOCSTR_EXECUTABLE, _
sExtension, "open", sResult, pcchOut)
wobei ASSOCSTR_EXECUTABLE 2 ist?

Das Ergebnis liefert den **kompletten** Pfad zur Exe-Datei der verkn�pften
Extension.
Ist das nicht die einfachere L�sung, oder habe ich dabei etwas �bersehen?

Wolfgang


Wolfgang Badura

unread,
Jun 21, 2011, 1:09:08 PM6/21/11
to
Hallo Armin!
"Armin Zingler" <az.n...@freenet.de> schrieb im Newsbeitrag
news:966d7h...@mid.uni-berlin.de...
> Am 19.06.2011 12:04, schrieb peter...@live.de:

Ich hatte in der Fragestellung �bersehen, da� chr(0) im String das Problem
ist.
Tut mir leid.

Wolfgang.


0 new messages