我在Vista中遇到了一个很好的“bdeadmin.exe”问题。 首先,让我们得到可预见的回应:
“你不应该要求你的申请被提升。”
这个呢。 这就是生活。
“你需要embedded一个清单文件。”
它已经被编译,已经有很多年了,创build它的公司无意再重复它,并且从合并模块(MSM文件)安装。
“BDE已经过时了,你应该使用dbExpress”
一百五十万行代码 “Nuff说。
“删除EXE旁边的清单文件”。
试过了,什么也没做。 作为一个testing,同样的清单文件能够使其他几个EXE文件需要提升,而不是我想要的。 在那里有东西阻止外部清单被读取。
“创build一个快捷方式并设置SLDF_RUNAS_USER。”
不能这样做,这是一个控制面板小程序。
唯一有效的工作是在其“属性”窗口的“兼容性”选项卡下设置“以pipe理员身份运行此程序”。 我不应该告诉用户这样做。 生意不好。 我需要安装程序这样做。 MSM文件使用静态path。
您可以通过设置一个简单的注册表项以编程方式设置“以管理员身份运行此程序”标志(您可以在EXE的属性的兼容性选项卡中找到的选项)。 您需要在这些键之一下创建一个字符串值(REG_SZ)(如果您希望设置分别为每个用户或每台机器):
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers
要么
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers
值的名称需要是可执行文件的完整路径(如果路径包含空格,请不要用引号将路径包围),并且该值的数据必须包含字符串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/
这是一个很长的过程,但是如果EXE的名称中有“setup”或“install”这个词,Windows会在运行时提示提升。 不过,我不知道是否可以使用控制面板小程序。
你有没有试过微软的应用程序兼容性工具包 ? 它分析您的应用程序,并提供可能能够帮助解决您的问题的兼容垫片。
使用一个使用ShellExcute的包装程序,使用“runas”作为它的“动词”来运行你想要的程序。
我发现如果.exe
位于C:\Program files\...
下, .manifest
文件方法不起作用,并且.exe
以前没有.manifest
文件运行。 Windows会在第一次运行.exe
时记住.manifest
。 这意味着当用户抱怨他们的安装不能运行时,您不能只发送清单。 清单文件必须放置在放置.exe
的同一安装之前或之中。
如果.exe
更改(如新版本或不同的字节数),Windows会重新检查.manifest
以静音模式+管理请求模式将您的应用程序打包到WinRar SFX中。
.MSI变量比搞乱要简单得多。
如果这是可能的,我会感到惊讶。 这将是恶意代码滥用系统的理想方式。 你可能会告诉用户管理员必须安装,或者他们必须有管理员权限(就像Windows上的所有其他程序一样)。