0

我有一个应用程序,每次部署新的 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 中看起来像病毒。

我想实现以下目标:

  • 用户不需要知道具有管理员权限的帐户
  • 管理员用户的凭据保存在程序的数据库中
  • 尽可能自动注册。
4

2 回答 2

0

您应该以管理员身份运行这部分代码。你需要的是模仿。

看这篇文章

代码项目上的文章模仿

于 2012-05-15T10:31:54.950 回答
0

出于安全原因,您不应在应用程序中嵌入此类用户字符串。

设计理念是您使用系统管理服务或类似方式进行部署以管理部署(这很糟糕)。

我使用私有程序集解决了这个问题,这与 unix 的工作方式非常相似。

如果您希望在 SQL Native Client 中添加类支持,那么您会发现每次部署都是一项艰巨的任务。

如果您知道本地管理员名称和密码,则可以使用中央部署解决方案,而不是尝试让您的应用模拟管理员。

于 2014-07-30T16:30:27.123 回答