从另一个以管理员身份启动应用程序

时间:2012-10-03 14:37:00

标签: c# .net security windows-7 uac

我在这里有点失落。

我有一个应用程序,我们称之为App1。

App1运行正常。在某些情况下,App1需要执行另一个程序App2。

代码很简单:

           /*call app2*/
            ProcessStartInfo startInfo = new ProcessStartInfo(Convert.ToString(ConfigurationManager.AppSettings["pathActualizador"]));

            startInfo.UseShellExecute = false;

            try
            {
                System.Diagnostics.Process.Start(startInfo);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Error en parármetros enviados al Actualizador..", Properties.Resources.txtTituloAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            /*close app1 and letting app2 do its work*/
            Application.ExitThread();

在某些情况下,我对调用app2的授权有疑问。 App1是一个简单的系统,app2需要创建,移动和删除一些文件和文件夹(这就是为什么给我带来麻烦) 至少,我们通过右键单击 - >解决它作为管理员de app2执行的问题。属性 - >以管理员身份执行。

我正在努力解决这个问题。 我已经阅读了许多帖子,关于在SO中创建清单文件。 所以,我创建了一个。 我在Application project中添加了新项目 - >添加新项目 - > app.manifest

默认创建时,只更改了此

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

此显示适用于App1。 我们在100台计算机上都有两个应用程序,我们无法逐个更改(大多数都在另一个国家/地区) 但我们有一个应用程序来修改,发送一些命令抛出Internet,app1。 所以,我已经读过,如果一个进程创建另一个进程,这个新进程将具有与其父进程相同的ExecutionLevel。因此,在为App2创建Process时,在App1中添加清单应该以Administrator身份执行

我是对还是不对?

另一方面,我已经添加了清单,编译并将.exe和.manifest发送到客户端,运行,我仍然遇到同样的问题:app2无法访问文件夹来修改它们,返回特权问题。

有什么问题吗?我要为App2创建一个清单吗?这有点困难,也很难为每台机器配置窗口..

我读过我也可以做类似

的事情
startInfo.Verb = "runas";

但也读到了将来(在2008年这样说)可以忽略这一点,唯一的方法就是使用清单。所以我想避免这个选项

编辑:使用Visual Studio 2010,.NET 3.5

edit2:我试过“runas”,也没用。用户不是管理员,因此没有管理员权限

2 个答案:

答案 0 :(得分:0)

您是否尝试过设置WorkingDirectory,也许您尝试从App1的WorkingDir运行App2

ProcessStartInfo info = new ProcessStartInfo();
info.WorkingDirectory ="SomePath";

<强>编辑:

我在SO上找到了一个可以帮助你的条目: How to start a Process as administrator mode in C#

答案 1 :(得分:0)

我将建议您不需要管理凭据:

  

app2需要创建,移动和删除一些文件和文件夹(即   为什么给我带来麻烦)

声明中没有任何内容证明您需要成为管理员。我建议您重新访问程序的体系结构。我要采取的第一步是在您的系统上有两个单独的用户。 app1的用户和app2的用户可以分别呼叫App1UserApp2User。现在,这两个用户的配置应如下所示:

非特权,无法登录,只能执行各自的程序,并且对没有直接控制的任何内容没有权限。

现在App1User可以委托App2User执行app2,这可以防止任何权限升级发生,并且无需管理员。现在App2User需要能够创建,移动和删除它拥有的东西。这不应该是一个问题,作为一个普通用户,我可以创建,删除和移动我拥有的东西。事情需要以管理员或root身份运行的原因很少。

<强>更新

回复以下内容:

  

问题是当App1需要调用App2时App2可以执行某些任务。   App1不需要创建文件夹或任何东西,所以没有问题   与UAC。 App2确实

好的,我们将从头开始有以下三个系统对象:

AppUser1,AppUser2, AppUserGroup

AppUserGroup将包含AppUser1AppUser2。需要锁定AppUserGroup,类似于应用用户。需要配置权限的方式如下:

App1归AppUserGroup所有,至少具有执行权限 App2归AppUserGroup所有,至少具有执行权限。

确保权限也授予组内的用户。现在,允许您执行的操作是将AppUser1作为AppUserGroup的成员调用该程序,并通过在组内部以及拥有该过程的组来运行App2。如果需要进一步澄清,请告诉我。