看板 C_Sharp 關於我們 聯絡資訊
各位先進大大好: 小弟做了一個ASP.Net網站,需要存取網站以外的應用程式, (Google Desktop,因為想用它來實作全文檢索功能) 由於google desktop可利用httprequest來操作,所以沒有太大麻煩, 問題是它裡頭有個安全金鑰必須透過讀取Registry才能拿到, 這個Registry會因使用者不同而異,當然也就影響了網站的移植性, 所以不能寫死。 雖然C#的現成函式能夠操作讀取Registry,但我發現ASP.Net的權限不足, 於是寫好的code被擋掉了。 我暫時想出來的方法是: 寫一隻console程式讀取registry並將它寫在一個xml設定檔內, 每次驅動google desktop時就進去這個設定檔讀出安全金鑰, 也就是每移植一台新電腦時,要先手動去點這個主控台程式,讓它的registry被更新。 但我後來發現它比想像中麻煩,因為就算同一台電腦,同一個使用者, 金鑰好像還是常常會跑掉,如果將來移交這樣的程式給別人, 網管一定煩死了,因為他可能得天天手動去按程式更新那個設定檔。 所以我還是回到原點,希望能即時讀取registry key, 不過既然我都已經將它獨立包裝成了這隻主控台小程式, 我想利用Asp.Net呼叫System.Diagnostics.Process.Start去從外部驅動它, 而且另一方面用戶端的人也不會看見那個主控台閃出來, 除非我就在server上開啟這個網站。 結果驅動這隻程式成功了,但運作結果卻是失敗的, 因為這隻程式有對我的XML設定檔作I/O,而這個動作又被檔掉了, 我認為這應該又是因為權限不足的緣故… 不知有沒有大大因為類似的問題被困擾過,可以分享一下經驗的呢?感激不盡! -- 子曰:『槍管不清,則禮樂不興。』 ~掄語 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.13.116 ※ 編輯: CYBASTER 來自: 140.112.13.116 (11/12 15:26)
petrushka:try impersonate 11/13 09:04
petrushka:建議只在需要的地方使用impersonate方法 11/13 09:06
petrushka:不建議在web.config中設定 這樣比較安全一些 11/13 09:07
petrushka:如果不在web.config中設定, 你需要透過PInvoke來實作 11/13 09:08
deuter:把要讀取的regkey讓Network Service account 可讀就好了 11/13 11:32
deuter:Network Service是預設的IIS App Pool account 11/13 11:33