【发布时间】:2012-06-07 19:40:22
【问题描述】:
首先,是的,我在互联网上搜索过这个主题,但我的情况更具体一些,所以这就是我提出问题的原因。
我的应用程序是在 Visual Studio .NET 2005 中使用 Framework 2.0、C# 开发的可执行 winform 应用程序
应用程序需要在命令行上运行一些命令。此命令必须以管理员身份运行。
实际起作用的代码是:
string output = "";
Process Consola = new Process();
ProcessStartInfo ConsolaStartInfo = new ProcessStartInfo();
ConsolaStartInfo.FileName = "cmd.exe";
ConsolaStartInfo.WorkingDirectory = System.Environment.SystemDirectory;
ConsolaStartInfo.UseShellExecute = !NeedOutput;
ConsolaStartInfo.RedirectStandardOutput = NeedOutput;
Consola.StartInfo = ConsolaStartInfo;
ConsolaStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
ConsolaStartInfo.CreateNoWindow = true;
ConsolaStartInfo.Arguments = "/C " + CommandToPerform;
ConsolaStartInfo.Verb = "runas";
Consola.Start();
Consola.WaitForExit();
地点:
CommandToPerform is a string var with a command
NeedOutput is true or false depending if i need a return output or not.
(This works)
第一个提示是:如果我在 Windows 7 上以管理员身份运行 Visual Studio,则此应用程序可以正常运行。
第二个提示是:如果我不是以管理员身份运行 Visual Studio,则此应用程序可以正常运行,但每次执行命令行时,该过程都会要求我在屏幕上进行安全验证 (UAC)
是的,我尝试使用清单,但我在编译它时遇到了很多问题。它有时会返回 9009 错误,很多错误。
所以我的问题是:
1) 有可能在不询问用户权限的情况下做到这一点吗?应用程序必须是静默的。这是真正的问题。如果是这样……
2) 如何为我的应用程序定义清单以管理员身份运行此命令?我想念什么?它的应用程序的相同标志?
3) 我的应用可以在不以管理员身份运行的情况下以管理员身份运行这些命令吗?这是完美的场景,将使用此应用的用户不能/不能是管理员。
4) 这适用于 XP 吗? XP要求UAC? (在我开发出最低要求版本之前,我无法在 XP 上对其进行测试)
任何想法/解决方案/提示将不胜感激,如果最终不是解决方案,更好的解决方法将被标记为答案(我有 100% 的比率)
注意事项:
- 我无法根据客户要求将框架从 2.0 迁移到更高版本。
- 我无法根据客户要求将 Visual Studio .NET 2005 迁移到更高版本。
- 应用程序需要在从 XP(无任何 SP)到 Windows 7 的所有版本中运行
- 是的,如果符合“Microsoft 政策”和应用要求(框架 2.0、API 或类似的东西,不能使用不是来自 microsoft 的 mods/controls/library),我可以使用解决方法
已编辑:
- 将密钥添加到:HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers WORKED 的解决方案。
但是当您运行应用程序时,它会提示(带有常见的 UAC 提示)权限
【问题讨论】:
-
我觉得在答案中写这个很愚蠢,但我认为 UAC 可以弹出并询问用户,我非常确定没有办法解决这个问题。
-
看看能不能帮到你:Introducing ConsolR
标签: c# .net windows .net-2.0 uac