【发布时间】:2021-10-21 20:36:22
【问题描述】:
我有一个问题我从这个应用程序启动一个具有管理员权限的应用程序,另一个应用程序在最后启动。然后继承管理员权限。但它应该从正常的用户权限开始。有没有人有解决问题的方法或提示?
【问题讨论】:
标签: vb.net admin-rights
我有一个问题我从这个应用程序启动一个具有管理员权限的应用程序,另一个应用程序在最后启动。然后继承管理员权限。但它应该从正常的用户权限开始。有没有人有解决问题的方法或提示?
【问题讨论】:
标签: vb.net admin-rights
最简单的方法是让 Explorer 为你启动它:
Process.Start("explorer.exe", """C:\path to\your.exe""")
您不能将任何参数传递给 exe - exe 名称已经是资源管理器的参数,我不相信有办法让资源管理器将您作为参数(给资源管理器)提供的其余部分解释为“应该传递给正在启动的程序的参数”..
..但您可以创建一个传递相关参数的小程序,然后资源管理器启动该小程序。
'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 这样的 args,那么你将不得不用它来获得更多的创意,因为你不能将 / \ : 放在文件名中.. base64 编码整个 arg 字符串怎么样,命名文件,然后让您的启动程序解码 b64?
【讨论】: