2008-08-06 101 views
7

(y/N)您可以從Adobe Air訪問Windows註冊表嗎?

編輯:只讀訪問沒問題。

+0

的應用程序是一個後臺下載,我需要獲得用戶名和角色,這是目前僅存儲在註冊表中的一些方法。我想我可以通過只讀訪問來訪問註冊表文件,但顯然它會嘗試和解析是瘋狂的(正如Jarin所說的)。我已經決定從用戶目錄的名稱中獲取用戶名,並在服務器上編寫Web方法以恢復其角色。 C#是一個有創意的想法,謝謝。 – Shawn 2009-10-22 15:20:07

+0

如果你能我會感到震驚。 – sparkes 2008-08-06 16:50:10

回答

2

如果您願意強制用戶安裝另一個應用程序,則可以編寫一個小型C#或C++ windows服務,該服務只需打開一個提供某種協議即可訪問註冊表的Socket即可。然後在AIR中,您可以使用Socket類將消息發送到C#服務/從C#服務返回結果到AIR應用程序。

當應用程序加載時,您可以嘗試連接到套接字,並且如果連接被拒絕,則可以提示用戶下載/安裝該服務。

至於直接訪問註冊表,我敢肯定Adobe不會允許來自AIR的。

0

理論上你可以修改實際的註冊表文件,但是我會極力阻止這個想法。

1

你想確定用戶是否是管理員?

如果是這樣,您可以使用「File.userDirectory.name」對用戶名進行修改。

我想弄清楚用戶是否可以嘗試訪問需要管理員權限的文件(也許嘗試將文件寫入Windows/System32)。如果文件訪問失敗,則可以假定該用戶位於有限帳戶下。

0

如果您決定創建一個偵聽註冊表命令的套接字服務器,請非常小心。您可能會造成安全漏洞,用戶的個人防火牆可能會妨礙可用性。

2

如果你能我會感到震驚。

你爲什麼會感到恐懼? Air是一個桌面平臺,可以訪問操作系統的API(例如註冊表訪問),這很有意義。這就是說,它現在不被支持(並且由於Adobe似乎非常以Mac爲中心,我懷疑它會被添加)。

我已經解決從用戶目錄

使用File.userDirectory.name在大多數情況下工作,這個名稱抓住了用戶名,但它似乎是一個非常脆弱的執行,它依賴在操作系統上維護以用戶名作爲目錄的約定。我可以想到一些可能會破壞它的事情(使用TweakUI等)。

1

有點晚了,但是當項目快結束時,我從客戶那裏得到了一個從註冊表中讀取一些值的願望。如果有更多這樣的願望,我將永遠不會選擇AIR。但是我從FluorineFx中找到了一個很好的擴展,通過擴展它,我現在可以從註冊表中讀取字符串和雙字值。僅Windows:http://aperture.fluorinefx.com/

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文件中讀取。詳細到註冊表編輯器的選項:http://www.robvanderwoude.com/regedit.php

這裏有一些額外的資源:
.reg文件的語法:http://support.microsoft.com/kb/310516
寫與空氣文件:http://www.adobe.com/devnet/air/flex/articles/exploring_file_capabilities.html

1

下面是使用的NativeProcess在Adobe AIR修改Windows註冊表的一個樣本和Python。所以你可以通過一行代碼添加,刪除或讀取密鑰!

下載:Adobe Air Registry Modifier在Github上