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
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
"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
>
> 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
Ich hatte in der Fragestellung �bersehen, da� chr(0) im String das Problem
ist.
Tut mir leid.
Wolfgang.