Run Internet Explorer as a different user - vb.net

I'm trying to launch Internet Explorer with a different user to access a website that requires single sign on.
Below is the code that I'm using. It doesn't produce any errors but IE doesn't launch at all, not even the process.
Try
System.Diagnostics.Process.Start(IExplorerPath, Username, ConvertToSecureString(Password), Domain)
Success = True
Catch ex As Exception
Success = False
Error_Message = ex.Message
End Try
I also tried the following variation with the same result (nothing):
Try
Dim psi As New ProcessStartInfo()
psi.Filename = IExplorerPath
psi.UserName = Username
psi.Domain = Domain
psi.Password = ConvertToSecureString(Password)
psi.UseShellExecute = False
Process.Start(psi)
Success = True
Catch ex As Exception
Success = False
Error_Message = ex.Message
End Try
This is the ConvertToSecureString function:
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

Ok, I've been searching a lot a solution for this and if you have it you deserve a Nobel price. In the mean time, if it helps anyone this is the workaround that I had to use:
Use Process.Start to run a .bat file that contains the following code:
runas /user:User#Domain.com "C:\Program Files\Internet Explorer\iexplore.exe"
Then, when the command prompt appears I use the Send Keys to type in the password and press Enter.
This launches IE with different credentials. But again, there should be a better way.

This may / may not work. Try to launch your website that requires single sign on in "CHROME", hit F-12, go to Application Tab -> Cookies -> Click on your site link. on left hand side look for something that represent your session id, may be JSESSIONID or similar, copy that. Now open your Internet Explorer, hit F-12 and manually create that JSESSIONID by running this command in console window
document.cookie = "JSESSIONID=<your-session-id-from-chrome"
hit play button to execute script
Refresh your browser

Related

Error thrown trying launch a webpage from a button

I created a button and a menu item in vb.net (.NET 6). I found several answers here on SO that say the process to launching a webpage from such an event can be launched with this code:
Dim webAddress As String = "http://www.example.com/"
Process.Start(webAddress)
However, trying launch the code, I'm given the error of "system cannot find the file specified".
Looking more into it, I know that .NET 6 is running a bit differently and changed the code to the following:
Using link As New Process()
link.StartInfo.UseShellExecute = True
link.Start(New ProcessStartInfo("https://example.com"))
End Using
But still to no avail, and I am given the same error. "System cannot find the file specified." I can run addresses via the regular Windows Run prompt... but the program still cannot launch.
Following Jimi's comment to my original question, I changed the Sub to the following:
Sub LaunchWebsite(strWebpageURL As String)
Using Process.Start(New ProcessStartInfo(strWebpageURL) With {.UseShellExecute = True})
End Using
End Sub
Using this, the webpage launched in my desktop's default browser with no problem.
You can use
Respone.Redirect("http://www.example.com/")
or use javascript in server side code
Dim url As String = "http://www.example.com"
Dim s As String = "window.open('" & url + "', 'popup_window', 'width=300,height=100,left=100,top=100,resizable=yes');"
ClientScript.RegisterStartupScript(Me.GetType(), "script", s, True)
Above code open webpage in new popup window.
Regards
Aravind

VB.net Terminal Server application

im working on an terminal service application for personal use that allows me to list and manage all my RDP sessions via tabs (I know these exists, but using it as a small learning project also). I was wondering if anyone could help with a few items. I am trying to dynamically create and add tabs and the RDP control onto each tab. This seems to be working OK for creating the first tab page and control but fails on the subsequent ones with the error below Code below:
Dim theNewTabPage As New DevExpress.XtraTab.XtraTabPage()
theNewTabPage.Text = txtserver.Text
theNewTabPage.Name = Minute(DateTime.Now) & Second(DateTime.Now)
Dim RDPCONTROL As New AxMSTSCLib.AxMsRdpClient9NotSafeForScripting
RDPCONTROL.Dock = DockStyle.Fill
'Just a test to ensure unique name
RDPCONTROL.Name = Minute(DateTime.Now) & Second(DateTime.Now)
XtraTabControl1.TabPages.Add(theNewTabPage)
theNewTabPage.Controls.Add(RDPCONTROL)
Try
RDPCONTROL.Server = txtserver.Text
RDPCONTROL.Domain = txtdomain.text
RDPCONTROL.UserName = txtusername.Text
Dim secured As MSTSCLib.IMsTscNonScriptable = DirectCast(RDPCONTROL.GetOcx(), MSTSCLib.IMsTscNonScriptable)
secured.ClearTextPassword = txtpassword.Text
RDPCONTROL.Connect()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try`
Error when creating the second connection:
Using ex.message: exception of type 'system.windows.forms.axhost+invalidactivexstateexception was thrown
Using ex.tostring: property set of 'Server' cannot be invoked at this time
The next item is how can i detect if the RDP session was disconnected on the tab and then pop-up a message and close the required tab
After a bit of playing around i was able to solve this by calling:
XtraTabControl1.SelectedTabPage = newTabPage
Just after i added the new tab page.
Hope this helps someone in the future

Raising UAC window loads my form twice

I am using following code to raise UAC window. It works fine but my form that contains button to raise this window is shown twice. I mean if I put it in CopyFiile Button, when I click this button, it raises UAC windows, copies file, gives success message and then opens another instance of the same form that contains copyfile button. Please help.
Dim proc As New ProcessStartInfo
proc.UseShellExecute = True
proc.WorkingDirectory = Environment.CurrentDirectory
proc.FileName = Application.ExecutablePath
proc.Verb = "runas"
Try
Process.Start(proc)
Catch
' The user refused to allow privileges elevation.
MsgBox("Permission denied by user ! Can not proceed.", MsgBoxStyle.Critical)
vrIfDenied = 1
Return
End Try
Correct me if I'm wrong but i see your proc filename property is equals to it's self. You are running the same application and makes 2 instances of the current application
Add this to your code:
<DllImport("shell32.dll", EntryPoint:="IsUserAnAdmin")> _
Public Shared Function IsUserAnAdmin() As Boolean
End Function
Now when your app loads, check to see if it is running as elevated priviledges, and grey out the Copyfile button like this if it isn't:
If IsUserAnAdmin() = False Then
btnCopyFile.enabled=false
ElseIf IsUserAnAdmin() = True Then
btnCopyFile.enable=true
btnElevateMe.enabled=false
End If
Now you can add a 2nd button (btnElevateMe) which will use the code you originally posted to elevate the priviledges and bring up the UAC prompt. When running WITH priviledges, it will be greyed out.
Also, add to your code after "End Try" this:
Application.Exit()
And it will close the app after starting a second instance with elevated priviledges.

Respond to commandline program question in VB.net

I'm using VB.net to have a GUI on top of a commandline program.
Dim sqliProcess As New Process()
sqliProcess.StartInfo.UseShellExecute = False
sqliProcess.StartInfo.RedirectStandardOutput = True
sqliProcess.StartInfo.RedirectStandardError = True
sqliProcess.StartInfo.FileName = "C:\shell_program.exe"
sqliProcess.StartInfo.CreateNoWindow = True
sqliProcess.Start()
Do While Not bw.CancellationPending
Try
If Not sqliProcess.StandardOutput.EndOfStream Then
Debug.Print(sqliProcess.StandardOutput.ReadLine)
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error reading output")
End Try
Threading.Thread.Sleep(1)
Loop
Which works and prints out all output from the commandline program. However at some point the commandline program ask for user interaction, eg:
Type a number (1/2/3/4):
But the commandline program stops after this. I suspect this is because it doesn't receive a valid option.
Is there a way to capture when the commandline program wants user interaction and hold the reading of the stream to be able to enable the user to input something?
It's not that hard if you use the events. (Don't forget EnableRaisingEvents). Look here at outputdatareceived..

Run console hidden

I'm trying to run a console window hidden while using CreateProcess(I can't use the ProcessStartInfo class because I have to run it with some other special settings)
I have tried to use the CREATE_NO_WINDOWS flag, but somehow, the console still pops up. This is the code I have:
Dim ProzessInfo = New Process_Information
Dim StartInfo = New Startup_Information, PS = New Security_Flags, TS = New Security_Flags
If CreateProcess(Nothing, target, PS, TS, False, PROCESS_CREATION_FLAG.CREATE_NO_WINDOW, Nothing, Nothing, StartInfo, ProzessInfo) = 0 Then MsgBox("Couln't start application")
What have I missed to run it hidden?
You may want to try
AppwinStyle.Hide, True
MSDN AppWinStyle
Or
EDIT:
Try This for Processes
Dim psi1 As New ProcessStartInfo("file path here")
Process.CreateNoWindow = True
Depending on what your end goal is you can always change the application type to Windows Forms Application. (Assuming you are running a console app now.)