Установка Path dir name с пробелами для Process - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь открыть Outlook из кода VB.NET через объект Process.

Dim PSI As New ProcessStartInfo

' ORG - 
'PSI.FileName =  GetOutlookPath() & My.Settings.OutlookAppExe ' Returns C:\Program Files\Microsoft Office\Office16\Outlook.exe
'PSI.Arguments = My.Settings.OutlookAppArgs
 
PSI.FileName = IO.Path.Combine(GetOutlookPath(), My.Settings.OutlookAppExe)  ' "/e ""C:\Program Files\Microsoft Office\Office16\Outlook.exe""" 

'PSI.Arguments = “/importprf \\comp.us\syscol\comp.us\Software\Outlook2010\comp.prf” ' My.Settings.OutlookAppArgs
 

Вот метод GetOutlookPath ():

Private Function GetOutlookPath() As String
    Dim Val As String = ""
    If My.Settings.OutlookAppPath = "" Then
        Try
            Dim Key As RegistryKey = Registry.LocalMachine.OpenSubKey(My.Settings.OutlookRegPath)
            Val = Key.GetValue("Path")
            Val = Val.Replace(";", "")
            If Val.LastIndexOf("\") <> Val.Length - 1 Then
                Val = Val & "\"
            End If
        Catch ex As Exception
            Log.Add("Unable to get registry value for Outlook: " & ex.Message)
            Throw New Exception("Unable to get registry value for Outlook: " & ex.Message)
        End Try
    Else
        Val = My.Settings.OutlookAppPath
    End If
    Log.Add("GetOutlookPath: " & Val)
    Return Val
End Function

Приведенный выше код работает на Win 7, но создает проблемы с некоторыми системами Win 10.Я просто выбрасываю имя режиссера не найденное исключение.Я попытался заменить значения переменных «Настройки» реальным содержимым, чтобы попробовать, и все вышеперечисленные способы работы с путем с пробелами, но ничего не работает.Может кто-нибудь, пожалуйста, помогите мне знать, как мне установить значения пути и заставить его работать на всех Win OS.Аргументы, передаваемые в Process, также вызывают трудности.

Открытие IE также выдает ту же ошибку.Вот код для IE:

Private Sub LaunchIE(ByVal UserName As String, ByVal SecurePassword As SecureString, ByVal Domain As String, Optional ByVal WebSite As String = "http://iserver1/comp")
    Try
        Log.Add("LaunchIE: UserName " & UserName & " SecurePass Length: " & SecurePassword.Length & " Domain: " & Domain & " WebSite: " & WebSite)
        Dim PSI As New ProcessStartInfo
        'PSI.FileName = GetIEPath() & My.Settings.IEAppExe
        'PSI.Arguments = WebSite
      '' Tried to open notepad - no space in path, yet it throws "The directory name is invalid" exception

        PSI.FileName = IO.Path.GetFullPath("C" & IO.Path.VolumeSeparatorChar & "\Windows\notepad.exe") ' Value = C:\Windows\notepad.exe

        PSI.UserName = UserName
        PSI.Password = SecurePassword
        PSI.Domain = Domain
        PSI.LoadUserProfile = True
        PSI.UseShellExecute = False

        IEProc.StartInfo = PSI
        IEProc.Start()
    Catch ex As Exception
        Log.Add("LaunchIE Failed: " & ex.Message)
        Throw New Exception("Unable to launch Internet Explorer: " & ex.Message)
    End Try
End Sub

Не могли бы вы помочь мне разобраться, как мне справиться с ситуацией.

Спасибо

1 Ответ

0 голосов
/ 07 февраля 2019

Установите свойство WorkingDirectory ProcessStartInfo, иначе вы получите «Недопустимое имя каталога».

Согласно: https://stackoverflow.com/a/25072978/373334

...