我正在開發Windows資源管理器命名空間擴展。我的應用程序是一個動態庫,由explorer.exe在某個時間加載和使用。我需要我的DLL在C:\中創建文件,有時在需要提升的其他位置執行此類操作。C++ winapi標高
我怎麼能執行這樣的高度,並在C上創建文件:例如\?
我正在開發Windows資源管理器命名空間擴展。我的應用程序是一個動態庫,由explorer.exe在某個時間加載和使用。我需要我的DLL在C:\中創建文件,有時在需要提升的其他位置執行此類操作。C++ winapi標高
我怎麼能執行這樣的高度,並在C上創建文件:例如\?
如果你的代碼中的另一個進程中運行時,它是在這個過程中擡高狀態的擺佈。如果該進程沒有運行提升,並且explorer沒有運行,那麼你的DLL中的代碼不能執行提升。因此
你的解決方案是建立另一個進程來執行需要提升的任務。使用以下方法之一執行此操作:
requestedExecutionLevel
指定requireAdministrator
選項。ShellExecuteEx
與runas
動詞的過程。另一個選擇是將需要提升的任務作爲一個單獨的COM對象來實現(一個名稱空間擴展本身就是一個COM對象,所以這對於COM開發人員來說是更自然的解決方案),然後使用[COM Elevation Moniker](http ://msdn.microsoft.com/en-us/library/windows/desktop/ms679687.aspx)在需要時實例化任務對象。不需要UAC清單。 –
這是一個很好的觀點。 com方法也提供了最簡潔的溝通方式。 –
@DavidHeffernan,是有這樣的表現特徵的DLL? – JimmyB
我以爲是。所以這不是OP的DLL的選項。 – JimmyB
[This](http://stackoverflow.com/a/4337793/1015327)總結得非常好。 – JimmyB