在 VB.NET 中如何在没有管理员权限的情况下启动程序?

How can I start the program without admin rights in VB.NET?

我有问题 我从这个应用程序启动了一个具有管理员权限的应用程序,最后启动了另一个应用程序。然后,这将继承管理员权限。但它应该从普通用户权限开始。有人有解决问题的方法或提示吗?

最简单的方法是让资源管理器为您启动它:

Process.Start("explorer.exe", """C:\path to\your.exe""")

您不能将任何参数传递给 exe - exe 名称已经是 explorer 的参数,我不相信有办法让 explorer 解释您作为参数提供的其余内容(给 explorer ) 作为“应该传递给正在启动的程序的参数”..

..但是你可以创建一个传递相关参数的小程序,然后 explorer 启动那个小程序。

'this is literally all the mini program does, then quits:
Process.Start("myactualprogram.exe", "some fixed arguments")

而您的主要提升程序是:

Process.Start("explorer.exe", """C:\path to\miniprogram.exe""")

--

“但是如果参数并不总是固定的呢?”我听到你哭了..“当我只能通过名称启动它时,我怎样才能让我的小程序做 Process.Start("myactualprogram.exe", "varying arguments here")?”

嗯..您可以让您的实际程序通过 TCP 套接字或其他方式联系您的第一个程序,并向它询问信息 - 进程间通信..或者可以编写一个文件,其中包含您的实际程序可以获取的参数。 . 或者,如果参数足够简单,你可以重命名(或复制)小程序,使其在名称中包含参数,并在启动时解析自己的名称

'myactualprogram.exe is expecting args of: varying arguments here
'the launcher is a winforms app called 'varying arguments here.exe' that has this code
Dim args = Path.GetFilenameWithoutExtension(Application.ExecutablePath)
Process.Start("myactualprogram", args)

当然,如果您的程序需要像 /out=c:\temp\file.txt 这样的参数,那么您将不得不对其进行更多创意,因为您不能将 / \ : 放在文件名中.. base64 怎么样编码整个 arg 字符串,命名文件,然后让您的启动程序解码 b64?