微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用UAC进行Windows UAC安全

我有一个用旧的Borland C ++编译器创build的exe文件。 它需要pipe理员权限才能正常工作。 由于该应用程序将在启动时运行,我不希望用户提示是否可以运行该程序(在Win7上testing)。 我的问题是有没有办法消除这个恼人的提示每次运行应用程序?

添加一个包含pipe理员权限的清单文件并对其进行了签名,但是它仍然以发布者名称显示

这将分发,所以我不希望用户不得不closuresUAC或做任何事情太复杂。 任何build议,非常感谢。

我希望UAC有一些像“永远信任这个计划”之类的东西。

WindowsAzure:是否可以在web.config中设置目录权限?

networking共享被拒绝权限

改变/ var / www到/ srv会得到403

Lazarus程序是否需要特殊的权限才能在Windows上运行?

sql – Windows策略

上传中创build新文件

configurationregistry权限工具

Py2Exe:避免Windows请求执行.exe文件的权限

创build一个进程作为另一个用户运行

我需要什么权限才能使Docker卷正常工作?

答案是使用计划任务在登录时运行。 计划任务由以SYstem权限运行的任务计划程序服务启动,因此可以在不提示用户启动的情况下使用提升的权限运行计划任务。 您还必须获得用户的确认一次 – 当您设置计划的任务 – 但不是每次程序运行。

由于我不知道你是如何安装你的程序(你使用的是哪个安装程序),我将向你描述一种你可能在任何环境中实现的方法:使用schtasks.exe和一个XML文件。 (请注意,这不适用于Windows XP及更高版本,但是您不必担心UAC。)

您需要像这样创建一个XML文件

<?xml version="1.0" ?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2013-11-01T00:00:00.0000000</Date> <Author>USERDOMAINUSERNAME</Author> </RegistrationInfo> <Triggers> <logonTrigger> <Enabled>true</Enabled> <UserId>USERDOMAINUSERNAME</UserId> </logonTrigger> </Triggers> <Principals> <Principal id="Author"> <RunLevel>HighestAvailable</RunLevel> <UserId>USERDOMAINUSERNAME</UserId> <logonType>Interactivetoken</logonType> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <disallowStartIfOnBatteries>false</disallowStartIfOnBatteries> <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries> <AllowHardTerminate>false</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>false</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartondemand>true</AllowStartondemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <WaketoRun>false</WaketoRun> <ExecutionTimeLimit>PT0S</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>c:pathtoyourapp.exe</Command> <Arguments>/your /parameters</Arguments> </Exec> </Actions> </Task>

将所有USERDOMAINUSERNAME替换为实际用户的域和名称。 例如,可以从相应的环境变量USERDOMAIN和USERNAME读取这些变量。

用你的应用程序的路径和/your /parameters替换你想要传递给你的应用程序的参数(如果有的话),将c:pathtoyourapp.exe替换c:pathtoyourapp.exe 。

这里的秘密魔法在于<RunLevel>HighestAvailable</RunLevel> ,这将使任务调度器运行你的应用程序。

Date并不重要,但为了完整性,您可以将其设置为当前的日期和时间。

创建XML文件并将其保存在某处(例如临时文件夹)后,您必须运行以下命令来创建实际任务: schtasks.exe /Create /TN "My App" /F /XML "c:pathtoxmlfile.xml" (将My App替换为在查看时应显示在任务计划My App中的名称)。

您可以使用schtasks.exe /Delete /TN "My App"再次删除任务。

(对于一个纯粹的C ++解决方案,你也可以采用这个例子,并添加缺少的东西,这将是指定用户名和设置使用最高可用权限的标志。

我正在写这篇文章,因为尽管CherryDT的答案是一个方法,但是根据上下文的不同,可能会稍微不灵活。

一个选项(取决于上下文)可能是重构成两个组件:

系统服务在启动时运行,并执行需要管理员访问的所有内容

与服务通信的客户端程序,不需要管理员访问权限。

这避免了烦人的提示,但它是更多的工作。 根据你的描述,目前尚不清楚这是去这里的正确方法,但可能是在路上(和其他人找到这张票),所以我认为这是值得一提的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐