我有一个应用程序,每次部署新的 dll 时,都需要将 dll 注册到客户端计算机上的 gac 中,问题是客户端计算机只有打开 UAC 的受限用户。
应用程序知道具有管理员权限的用户的凭据。
问题是,如果我有processStartInfo.UseShellExecute = false;
然后我无法通过 UAC 得到错误“请求的操作需要提升”,如果我有, processStartInfo.UseShellExecute = true;
那么它不允许以不同的用户运行整个事情:“进程对象必须有UseShellExecute 属性设置为 false,以便以用户身份启动进程”
internal static void Register(String assemblyName)
{
ProcessStartInfo processStartInfo = new ProcessStartInfo(lcDir + "gacutil.exe", string.Format("/i {0}.dll", assemblyName));
processStartInfo.UseShellExecute = false;
processStartInfo.WorkingDirectory = lcDir;
processStartInfo.UserName = lcUser;
processStartInfo.Password = Password;
processStartInfo.Domain = lcDomain;
processStartInfo.Verb = "runas";
Process process = Process.Start(processStartInfo);
process.WaitForExit();
}
我想知道这种事情的“最佳实践”是什么?我知道 whoe 的概念在 Windows 中看起来像病毒。
我想实现以下目标:
- 用户不需要知道具有管理员权限的帐户
- 管理员用户的凭据保存在程序的数据库中
- 尽可能自动注册。