如何以编程方式设置“以管理员身份运行此程序”

时间:2010-02-22 18:16:01

标签: windows properties compatibility admin runas

我在Vista中遇到了很好的'bdeadmin.exe'问题。首先,让我们得到可预测的响应:

“您不应要求提升申请。”
这一个。 C'est la vie。

“您需要嵌入清单文件。”
它已经编译,它已经很多年了,创建它的公司无意再次这样做,它是从合并模块(MSM文件)安装的。

“BDE已过时,您应该使用dbExpress” 一百五十万行代码。 '努夫说。

“删除EXE旁边的清单文件。”
试过,什么也没做。作为测试,同一个清单文件能够使其他几个EXE文件需要提升,而不是我想要的那个。那里的东西阻止了外部清单被阅读。

“创建快捷方式并设置SLDF_RUNAS_USER。”
不能这样做,它是一个控制面板小程序。

唯一有效的方法是在“属性”窗口的“兼容性”选项卡下设置“以管理员身份运行此程序”。我不应该告诉用户这样做。对业务不利。我需要让安装程序执行此操作。 MSM文件使用静态路径。

7 个答案:

答案 0 :(得分:37)

您可以通过设置一个简单的注册表项,以编程方式设置“以管理员身份运行此程序”标志(在EXE属性的“兼容性”选项卡中找到的选项)。您需要在其中一个键下创建一个字符串值(REG_SZ)(如果您希望设置分别是每个用户或每台计算机):

  

HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows   NT \ CURRENTVERSION \ AppCompatFlags \层

  

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\窗户   NT \ CURRENTVERSION \ AppCompatFlags \层

值的名称必须是可执行文件的完整路径(如果路径包含空格,不要用引号括起路径),并且值的数据必须包含字符串RUNASADMIN

样本:

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "PUT__VALUE__HERE"

兼容模式

WIN95 Windows 95
WIN98 Windows 98
WIN4SP5 Windows NT 4.0 SP5
WIN2000 Windows 2000
WINXPSP2 Windows XP SP2
WINXPSP3 Windows XP SP3
VISTARTM Vista
VISTASP1 Vista SP1
VISTASP2 Vista SP2
WIN7RTM Windows 7
WINSRV03SP1 Windows Server 2003 SP1
WINSRV08SP1 Windows Server 2008 SP1

权限级别

RUNASADMIN以管理员身份运行程序

  

REG ADD“HKLM \ SOFTWARE \ Microsoft \ Windows   NT \ CurrentVersion \ AppCompatFlags \ Layers“/ v   “C:\ temp \ compatmodel \ iconsext.exe”/ t REG_SZ / d“WINXPSP3 RUNASADMIN”   / F

参考文献: http://www.verboon.info/2011/03/running-an-application-as-administrator-or-in-compatibility-mode/

答案 1 :(得分:6)

这是一个很长的镜头,但如果在EXE的名称中有“setup”或“install”一词,Windows将在运行时提示提升。我不知道这是否适用于控制面板小程序。

答案 2 :(得分:1)

您是否尝试过Microsoft的Application Compatibility Toolkit?它会分析您的应用并提供可能有助于解决问题的兼容性填充程序。

答案 3 :(得分:1)

使用一个使用ShellExcute的包装程序,它使用“runas”作为“动词”来运行你想要的程序。

答案 4 :(得分:1)

我发现如果.manifest位于.exe之下并且C:\Program files\...之前已经在没有{{1}的情况下运行,则.exe文件方法不起作用文件。 Windows会在第一次运行.manifest时记住.manifest。这意味着当用户抱怨他们的安装没有运行时,您不能只发送清单。清单文件必须放在放置.exe的同一安装之前或期间。

如果.exe发生更改(例如新发布或不同的字节数),Windows会重新检查.manifest

答案 5 :(得分:0)

使用静音模式+管理员请求模式将您的应用打包到WinRar SFX中。

比弄乱.MSI变量简单得多。

答案 6 :(得分:-1)

如果可能的话,我会感到惊讶。这将是恶意代码滥用系统的理想方式。您可能会告诉管理员必须安装的用户,或者他们必须具有管理员权限(就像Windows上的所有其他程序一样)。