首先,是的,我在互联网上搜索过这个话题,但我的情况更具体一些,所以这就是我提出问题的原因。
我的应用程序是在 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 提示)获取权限