我在这里有点迷路了。
我有一个应用程序,我们称它为 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 项目中添加了新项目 --> 添加新项目 --> app.manifest
并且默认创建,只改变了这个
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
此清单适用于 App1。我们在大约 100 台计算机上都有这两个应用程序,我们不能一个一个地更改它(其中大多数都在另一个国家)但是我们有一个应用程序要修改,发送一些命令抛出 Internet,app1。所以,我读到如果一个进程创建另一个进程,这个新进程将具有与其父进程相同的 ExecutionLevel。因此,在 App1 中添加清单,当它为 App2 创建进程时,应该以管理员身份执行
我是对还是错?
另一方面,我已经添加了清单,编译并将.exe和.manifest发送到客户端,运行,我仍然遇到同样的问题:app2无法访问文件夹来修改它们,返回一个问题特权。
有什么不对 ?我必须为 App2 创建清单吗?这有点困难,也很难为每台机器配置窗口..
我读过我也可以做类似的事情
startInfo.Verb = "runas";
但也读到将来(2008 年说过)这可以被忽略,唯一的方法是使用清单。所以我想避免这个选项
编辑:使用 Visual Studio 2010、.NET 3.5
edit2:我试过“runas”,也没有工作。用户不是管理员,所以没有管理员权限