2013-02-02 27 views
-1

我在Excel中有一個加載項需要在HKEY_LOCAL_MACHINE註冊表中存儲一些數據。由於Windows Vista和早期版本中的UAC控制,我添加了一個清單文件。但它不起作用。我甚至在解決方案的每個項目中添加了清單。我的解決方案中有5個項目(3個VB項目,1個C++和1個部署)。VS2005中的UAC清單文件不起作用

我正在使用VS2005。我將清單文件添加到項目中(其中requestedExecutionLevel設置爲「requireAdministrator」,並在生成後命令中使用mt.exe嵌入清單) 即使如此,仍然會拒絕HKEY_LOCAL_MACHINE的訪問。這是工作的事情是,當我開始Excel作爲「以管理員身份運行」。

任何線索是什麼問題呢?謝謝。

+1

這是行不通的,只有EXE的清單纔會起作用。你不能合理地處理Excel.exe。請寫入HKCU或更改要寫入的HKLM密鑰的安全設置。請聯繫Microsoft支持部門以解決緊急需求,本網站提供服務保證。 –

+0

嗨漢斯,你快速回答。這正是我的問題。在啓動excel之後有沒有辦法提升加載項,並讓excel意識到該高程? (它似乎並非如此)或唯一的方法是啓動Excel提升?再次感謝 –

+0

不,只有一個過程可以提升。加載項無法強制提升,它必須處理EXE決定的任何策略。期望用戶啓動Excel升高是不合理的。他們會忘記,而Excel一般是高調的攻擊目標。更改註冊表項安全設置是最簡單且影響最小的解決方法。 –

回答

1

體現在DLL不影響應用程序的執行水平,在這種情況下,它是excel.exe

以下是您的選項:

  • 以管理員身份運行Excel;
  • 修改附加組件以寫入HKCU而不是HKLM。

如果你需要存儲提供給其他用戶的數據,請考慮使用ProgramData文件夾(CSIDL_COMMON_APPDATAFOLDERID_ProgramData)。然後,您的加載項將在ProgramData內創建一個子目錄並修改其權限,以便任何人都可以寫入此新目錄(默認情況下,只有創建該文件夾的用戶帳戶具有寫權限,其他用戶只能讀)。


還有一些其他的選擇:

  • 你可以寫你的附加通信將數據寫入到HKLM服務,但它不是。
  • 您可以創建一個將數據寫入HKLM的elevated COM object

儘管用戶不希望Excel在運行時需要提升高度,因此請考慮更改您的邏輯,以便您的加載項根本不需要提升。