我們有一個應用程序是部分標準EXE和部分WinService EXE。標準的EXE由註冊表的運行部分產生,並且在剛剛登錄的用戶憑證下登錄。WinService EXE設置爲自動運行,因此始終運行並以LocalSystem身份運行(基本上是管理員)。如何獲得標準EXE和WinService EXE以相互通信?
我們需要這兩個程序通過將信息寫入XML文件來共享數據。
當登錄用戶可以訪問已安裝的文件夾(C:\ Program Files \ ourApp)時,該應用程序正常工作。標準EXE寫入數據,WinService EXE讀取數據沒有問題,一切都很好。
但是,當登錄的用戶無權寫入已安裝的文件夾時,數據就會陷入UAC虛擬化和數據重定向,並在其他地方結束,而WinService不會從中找到也不能讀取它安裝文件夾。
爲了避免這種情況,我們嘗試將標準EXE和WinService EXE寫入並從%ProgramData%中讀取。這可以正常工作,但標準用戶無權寫入%ProgramData%。
我們不能使用%LocalAppData%,因爲對於登錄用戶來說,這將是C:\ Users \ LoggedInUser \ AppData \ Local,對於winservice它將是C:\ Users \ Administrator \ AppData \ Local。
在Vista和Win7中還有什麼地方可以啓用UAC虛擬化,這將允許只有用戶權限運行的標準EXE和運行爲LocalSystem的WinService相互通話。我們嘗試了註冊表,但問題更加嚴重。最後但並非最不重要。我們需要這個與XP無關的代碼。意思XP也有%ProgramData%,%LocalAppData%等環境變量,它可以在兩個工作。
無論您提出什麼解決方案,都需要應對兩個用戶同時登錄(並運行您的應用程序)的可能性。 – 2012-03-24 04:17:18
在安裝期間,您可以編輯'%ProgramData%\ YourAppDirectory'上的權限以允許向每個人寫入權限。這裏的默認權限:任何人都可以在那裏創建新的文件和文件夾,並且每個人都可以讀取它們,但只有創建者擁有者(和管理員)才能寫入這些文件。你可以改變它。您也可以更改'Program Files'中的權限,但不推薦使用;另外你不應該把數據寫入'Program Files'。 – 2012-03-25 08:47:10