2014-04-25 33 views
1

我正在開發Windows資源管理器命名空間擴展。我的應用程序是一個動態庫,由explorer.exe在某個時間加載和使用。我需要我的DLL在C:\中創建文件,有時在需要提升的其他位置執行此類操作。C++ winapi標高

我怎麼能執行這樣的高度,並在C上創建文件:例如\?

+0

@DavidHeffernan,是有這樣的表現特徵的DLL? – JimmyB

+0

我以爲是。所以這不是OP的DLL的選項。 – JimmyB

+1

[This](http://stackoverflow.com/a/4337793/1015327)總結得非常好。 – JimmyB

回答

1

如果你的代碼中的另一個進程中運行時,它是在這個過程中擡高狀態的擺佈。如果該進程沒有運行提升,並且explorer沒有運行,那麼你的DLL中的代碼不能執行提升。因此

你的解決方案是建立另一個進程來執行需要提升的任務。使用以下方法之一執行此操作:

  • 在應用程序清單中爲requestedExecutionLevel指定requireAdministrator選項。
  • 開始使用ShellExecuteExrunas動詞的過程。
  • 將代碼提升到COM對象中並使用COM高程名字對象。
+0

另一個選擇是將需要提升的任務作爲一個單獨的COM對象來實現(一個名稱空間擴展本身就是一個COM對象,所以這對於COM開發人員來說是更自然的解決方案),然後使用[COM Elevation Moniker](http ://msdn.microsoft.com/en-us/library/windows/desktop/ms679687.aspx)在需要時實例化任務對象。不需要UAC清單。 –

+0

這是一個很好的觀點。 com方法也提供了最簡潔的溝通方式。 –