问问自己您的设置是否真的适用于所有用户。 真的适用于所有用户吗?
仔细思考这个问题:
软件如何在 Windows XP 下作为标准用户运行?
- 软件只是崩溃了吗?
- 是否禁用了配置选项?
- 您是否告诉您的客户他们必须以管理员身份运行,如果他们拒绝了,您就不会支持它?
因为如果您的软件绝对需要您是管理员,那么只需将清单添加到可执行文件中,说明它需要以管理员身份运行:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
然后,您是管理员。
但我不认为你真的需要成为管理员。您需要本地计算机设置的唯一情况是,如果您要让来自多个登录或会话的用户使用该软件。如果真的是适用于每个用户的东西,安装程序不应该设置它吗?
我们在这里提出了同样的问题。监控系统需要配置软件将使用哪个捕获设备。您可以说所有监视操作员都将使用相同的捕获设备,因此一旦选择它,该设置对所有操作员都是全局的。但这在实践中是不正确的。可能只有一次捕获设备,而且它是我们使用的那个。如果有多个设备,则用户只需选择另一台设备即可。
但是有几种方法可以解决这个问题
i) 将设置保存在注册表中,并让安装程序在密钥上设置 ACL,让所有用户完全控制。
ii) 将设置保存在
%APPDATA%\Surveillance\settings.ini
文件。让安装程序创建设置文件,并对其进行 ACL 以允许所有用户拥有完全控制
iii) 将设置存储在上述注册表项或 ini 文件中,然后使用
将 UAC Shield 添加到您的保存/确定/应用按钮。当用户按下按钮时,您重新启动提升的应用程序(使用RunAsAdmin),并传递指示您要更改的命令行参数。
iv) 与 3 相同,但在他们进入用于编辑值的屏幕之前执行此操作。
v) 与 4 相同,但最初的值是只读的,如果他们想更改它们,就必须提升它们。
vi) 如果用户作为标准用户运行,并且如果他们想要更改它们,请禁用这些选项:右键单击可执行文件并选择
以管理员身份运行
如果这是一个用户可以随时更改的选项(当您在 Windows XP 上运行并且用户是管理员时),那么用户可以随意编辑该值似乎是可以接受的。
在这种情况下,您可以让用户输入服务器的名称,就像他们之前允许的那样。如果用户有权写入 HKLM,则将选项保存在那里。否则将其保存在 HKCU 中。读取要使用的服务器时,从 HKCU 开始,如果 HKCU 值不存在,则移动到 HKLM。