我看到很多关于如何在个人帐户上禁用特定应用程序的 UAC 的答案,但我还没有看到有人问或回答这个问题。
我们家有一台电脑。我们每个人都有一个帐户,我的帐户是管理员帐户。我儿子有一个他喜欢玩的游戏,但每次他启动它时,我都必须输入我的管理员密码。这显然很烦人,我宁愿一劳永逸地授予他权限。
我怎样才能做到这一点?
答案1
无法针对每个应用程序禁用 UAC。这样做也是非常不合逻辑的:如果标准用户不被授予管理员级权限,那么他就不能被允许以此类权限运行任何程序。问题出在游戏上,而不是 UAC。任何游戏都不应该要求拥有计算机的管理员权限(从而拥有破坏计算机的能力)。
答案2
您不需要禁用它,您需要确保应用程序不需要此类权限。虽然您可以去做所有这些,但最安全的方法是不这样做。进程监控可以帮助您找出需要“管理员”访问权限的路径和注册表项,授予他们所有管理员权限,然后以他的帐户运行游戏。
答案3
答案4
这是可行的,但您需要能够将管理员密码隐藏在编译的程序中(无论如何都不是完美的安全性,但足以让您的儿子无法了解管理员密码)。
首先psexec
从系统内部套件(可从 Microsoft 以 ZIP 文件形式获得)。 psexec
允许您以其他用户身份运行程序(如果您知道其他用户的密码)。以下代码假定您已在 安装了它C:\sysinternals\psexec.exe
。确保您儿子的帐户可以运行该程序。这将需要将安全设置更改为psexec.exe
授予您儿子帐户读取和执行权限。
然后将下面的 C 程序编译成可执行文件(我们称之为rungame.exe
),但更改代码以获得正确的psexec
游戏路径名,并更改代码以一次设置一个字符的实际管理员密码(参见代码中的注释)。这就是我们在 EXE 中混淆管理员密码的方法。如果您没有 Microsoft 编译器(例如 Visual Studio),您可以安装赛格威,它具有 GCC 编译器。
然后给rungame.exe
你的儿子(但显然不是源代码)。当他想要运行游戏时,他启动rungame.exe
,这将以管理员身份启动游戏,而无需提示输入密码。
#include <windows.h>
#include <stdlib.h>
// Be sure to use double-backslashes as path separators in this pathnames!
char * psexec = "C:\\sysinternals\\psexec.exe"; // <-- CHANGE THIS PATH AS NEEDED
char * game = "C:\\path\\to\\game\\program.exe"; // <-- CHANGE THIS PATH AS NEEDED
int main()
{
char cmd[1024] = { 0 };
char pw[128] = { 0 };
// Create the password ("hello" in this example) so that it does not appear as a string in the
// compiled version of this program.
pw[4] = 'o';
pw[3] = 'l';
pw[2] = 'l';
pw[1] = 'e';
pw[0] = 'h';
strcpy(cmd, "\"");
strcat(cmd, psexec);
strcat(cmd, "\" -d -u Administrator -p \"");
strcat(cmd, pw);
strcat(cmd, "\" \"");
strcat(cmd, game);
strcat(cmd "\"");
system(cmd);
return 0;
}