Avatar of Brian
Brian
Flag for United States of America asked on

Process.Start code not working when trying to launch as a specified user

I found this code that should run a program as a different user, but it errors and doesn't run the program.  Is there something I'm not doing correctly?
Imports System.Security
Imports System.ComponentModel

Module Module1

    Sub Main()
        Dim username As String = "MyUser"
        Dim password As SecureString = ConvertToSecureString("MyPassword")
        Dim domain As String = "MyDomain"
        Dim filename As String = "c:\windows\notepad.exe"
        Try
            System.Diagnostics.Process.Start(filename, username, password, domain)
        Catch ex As Win32Exception
            System.Windows.Forms.MessageBox.Show("Something went wrong!", "Error")
        End Try
    End Sub
    Function ConvertToSecureString(ByVal str As String)
        Dim password As New SecureString
        For Each c As Char In str.ToCharArray
            password.AppendChar(c)
        Next
        Return password
    End Function
End Module

Open in new window

Visual Basic.NETVisual Basic Classic

Avatar of undefined
Last Comment
Brian

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Russ Suter

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
Brian

ASKER
That's awesome!  Thanks Russ!  But I am getting an error for "MyPassword".ToSecureString.  The error is 'ToSecureString' is not a member of 'String'.  Maybe I need another Imports?
Russ Suter

As I said, my VB is a little rusty. ToSecureString is a method. Perhaps it needs the parentheses () at the end?
Russ Suter

DOH! It might have been helpful if I'd have included the Extension class declaration that houses the "ToSecureString()" method.
Public Class LocalExtensions
    
    Public Shared Function ToSecureString(this ByVal password As String) As SecureString
        Dim secure As SecureString = New SecureString
        For Each c As Char In password
            secure.AppendChar(c)
        Next
        Return secure
    End Function
End Class

Open in new window

I'm not 100% certain if extension classes are allowed in VB.NET so here's another version that should work just fine.
    Public Shared Function ToSecureString(ByVal password As String) As SecureString
        Dim secure As SecureString = New SecureString
        For Each c As Char In password
            secure.AppendChar(c)
        Next
        Return secure
    End Function

Open in new window

You'd just call that as a regular function like this:
startInfo.Password = ToSecureString("MyPassword")

Open in new window

I started with Experts Exchange in 2004 and it's been a mainstay of my professional computing life since. It helped me launch a career as a programmer / Oracle data analyst
William Peck
Brian

ASKER
Thanks Russ for giving such clear and precise information!