你可以从Adobe Air访问Windows注册表吗?

时间:2008-08-06 16:47:42

标签: flex actionscript-3 air

(Y / N)

编辑:只读访问权限很好。

8 个答案:

答案 0 :(得分:7)

我还没有尝试过这个,但我想我找到了一个解决方法。

Adob​​e AIR无法写入Windows注册表,但您可以在AIR 2中启动本机进程。以下是一篇博文,介绍如何执行此操作:http://www.adobe.com/devnet/air/flex/quickstart/articles/interacting_with_native_process.html

现在,在Windows上,您可以使用.reg文件修改Windows注册表。 .reg文件只是由regedit.exe读取的纯文本文件。所以从理论上讲,你可以将.reg文件写入文件系统,然后启动regedit.exe并传入.reg文件,然后... TADA!您刚刚从AIR应用程序修改了Windows注册表!

要读取值,可以使用regedit的导出函数写入reg文件并从reg文件中读取。有关regedit选项的详细信息:http://www.robvanderwoude.com/regedit.php

以下是一些额外资源:
.reg文件语法:http://support.microsoft.com/kb/310516
使用AIR写入文件:http://www.adobe.com/devnet/air/flex/articles/exploring_file_capabilities.html

答案 1 :(得分:2)

如果您愿意强迫用户同时安装另一个应用程序,您可以编写一个小型C#或C ++ Windows服务,只需打开一个Socket,提供某种访问注册表的协议。然后在AIR中,您可以使用Socket类向C#服务发送消息,从而将结果发送到AIR应用程序。

当应用程序加载时,您可以尝试连接到Socket,如果连接被拒绝,您可以提示用户下载/安装该服务。

至于直接访问注册表,我很确定Adobe不会允许来自AIR。

答案 2 :(得分:2)

  

如果你能让我感到恐惧。

你为什么会感到恐惧? Air是一个桌面平台,可以访问操作系统的API(例如注册表访问),这很有意义。

话虽如此,它现在不受支持(因为Adobe似乎非常以Mac为中心,我怀疑它是否会被添加)。

  

我已决定从用户目录的名称中抓取用户名

使用File.userDirectory.name在大多数情况下都可以工作,但它似乎是一个非常脆弱的实现,它依赖于操作系统维护用户名作为其目录的约定。我可以想到一些可能会破坏它的事情(使用TweakUI等)。

答案 3 :(得分:1)

以下是使用NativeProcess和Python在Adobe Air中修改Windows注册表的示例。所以你只需要一行代码即可添加,删除或读取密钥!!

在Github上下载:Adobe Air Registry Modifier

答案 4 :(得分:1)

您是否尝试确定该用户是否为管理员?

如果是这样,您可以使用“File.userDirectory.name”对用户名进行评分。

我想要确定用户是否是管理员,您可能会尝试访问需要管理员权限的文件(可能尝试将文件写入Windows / System32)。如果文件访问失败,您可能会认为该用户属于受限帐户。

答案 5 :(得分:1)

有点晚了,但我得到了一个客户希望在项目快完成时从注册表中读取一些值。如果有更多这类愿望,我将永远不会选择AIR。但是我发现了FluorineFx的一个很好的扩展,通过扩展它,我现在可以从注册表中读取字符串和双字值。仅限Windows:http://aperture.fluorinefx.com/

答案 6 :(得分:0)

理论上你可以修改实际的注册表文件,但我强烈反对这个想法。

答案 7 :(得分:0)

如果您决定创建一个侦听注册表命令的套接字服务器,请务必小心。您可能会创建一个安全漏洞,用户的个人防火墙可能会妨碍可用性。