我正在创建一个应用程序的自动更新器。该应用程序由用户启动,无需管理员特权即可运行。自动更新器使用管理员特权启动,并在下载新文件之前杀死应用程序。
问题在于,当自动更新器完成后,我想启动更新的应用程序。如果我使用常规的System.Diagnostics.Process.Start(file),应用程序也会以管理员特权启动,并且必须作为当前用户运行才能正常工作。
那么,如何使自动更新器作为当前用户而不是管理员启动应用程序呢?
我尝试使用以下方法:
var pSI = new ProcessStartInfo() {
UseShellExecute = false,
UserName = Environment.UserName,
FileName = file
};
System.Diagnostics.Process.Start(pSI);
但是这会抛出错误"无效的用户名或密码"。 我已经确认用户名是正确的,并且我理解密码可能无效,因为我没有包含它。 但是要求用户输入他/她的密码不是一个选项,因为启动应用程序自动化的整个原因是为了使用户更容易使用。
有什么建议吗?
SetTokenInformation
删除高完整性SID,然后使用修改后的令牌使用CreateProcessAsUser
启动新进程。 - Simon MᶜKenzie