我在这里有点失落。
我有一个应用程序,我们称之为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”,也没用。用户不是管理员,因此没有管理员权限
答案 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
的用户可以分别呼叫App1User
和App2User
。现在,这两个用户的配置应如下所示:
非特权,无法登录,只能执行各自的程序,并且对没有直接控制的任何内容没有权限。
现在App1User
可以委托App2User
执行app2
,这可以防止任何权限升级发生,并且无需管理员。现在App2User
需要能够创建,移动和删除它拥有的东西。这不应该是一个问题,作为一个普通用户,我可以创建,删除和移动我拥有的东西。事情需要以管理员或root身份运行的原因很少。
<强>更新强>
回复以下内容:
问题是当App1需要调用App2时App2可以执行某些任务。 App1不需要创建文件夹或任何东西,所以没有问题 与UAC。 App2确实
好的,我们将从头开始有以下三个系统对象:
AppUser1,AppUser2, AppUserGroup
AppUserGroup
将包含AppUser1
和AppUser2
。需要锁定AppUserGroup
,类似于应用用户。需要配置权限的方式如下:
App1
归AppUserGroup所有,至少具有执行权限
App2
归AppUserGroup所有,至少具有执行权限。
确保权限也授予组内的用户。现在,允许您执行的操作是将AppUser1
作为AppUserGroup
的成员调用该程序,并通过在组内部以及拥有该过程的组来运行App2
。如果需要进一步澄清,请告诉我。