2012-09-04 12 views
5

首先打開你好,感謝多次在這裏搜索幫助了我或教了我一些東西。競爭對手的應用程序安裝到我的相同文件夾,無需管理員授權

我爲我玩過的遊戲製作了自定義平視顯示器,並且正在使用C#中的一個安裝程序,受到另一個HUD啓發,以獲得相同的遊戲。它下載並覆蓋所有的腳本文件,以現有的目錄:

C:\Program Files (x86)\Steam\steamapps\me\team fortress 2\tf 

[我沒有對哪個文件夾到不幸使用任何控制,因爲我修改其安裝的閥文件]

在爲了刪除文件夾,添加文件夾,或複製文件,我不得不使用清單應用程序的每一個exe文件啓動時間增加用戶權限:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

不知何故,安裝程序我已經被激發正在安裝到我所在的同一個文件夾,而沒有任何forcin g UAC提示。

他的應用程序只顯示一個安全警告,但如果我取消選中「總是檢查」複選框,我可以無需驗證任何特殊權限一遍又一遍運行:

HTTP://www.trishtech如何使我的應用程序更加無縫像他的任何建議?我已經聯繫了另一個應用程序的作者,他說他也使用C#編寫的應用程序, ,但不知道他在做什麼特別的事情。

編輯:我知道幾件事w e're不同的方式來做,以防他們做出莫名其妙的差異:

  • 我使用一個文件瀏覽器來決定在哪裏把我的文件,這樣應用程序可以在任何地方運行。
    • 他只是將它們輸出到與exe相同的目錄中,要求將exe放在目標文件夾中。
  • 我正在使用ILMerge將SharpZipLib與我的應用捆綁在一起。
    • 他只是把他的zip文件放在exe旁邊。
+0

可能與UAC數據重定向有關:http://windowsteamblog.com/windows/b/developers/archive/2009/08/04/user-account-control-data-redirection.aspx – Simon

+0

要寫入'Program Files',你需要提升。大多數情況下,其他應用程序實際上不會寫入「Program Files」,而是寫入虛擬化程序文件。檢查文件是否真的被其他應用程序修改過。同時檢查VirtualStore:'C:\ Users \%USERNAME%\ AppData \ Local \ VirtualStore',文件的_「updated」_版本很可能在'VirtualStore'中。 –

+0

這些都是一些非常有趣的話題來看看,謝謝 – appski

回答

3

如果你試圖寫爲 「C:\ Program Files文件(x86)的」,那麼你需要管理員權限。由此可見,其他應用程序不能在那裏創建文件,而是應該不受UAC保護的目錄。

如果您的文件是每個用戶,那麼您可以在appdata文件夾中創建一個子文件夾並將文件保存在那裏。

公約是創建一個文件夾的indentity公司,另一個身份的產品,

var dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
      + "\\MyCompanyName\\MyApplicationName"; 
+0

我要去紀念這是正確的答案,因爲它可能對幾乎所有其他人這個問題的正確的意見。 然而,我自己的發現有點陌生,我會在後人的後面回答他們。 – appski

2

他只是它們輸出到同一個目錄下的EXE,需要EXE放入目標文件夾中。

我不認爲那會是。相同的exe目錄應該沒有區別,你有權限或者沒有權限。

「正常」響應將寫入您有權訪問的目錄。但這並不總是可能的。

如果您將應用程序作爲服務運行,它只會彈出一次我認爲在Windows下運行的應用程序,但這對您的用例來說似乎並不正確。

我不認爲會有任何適當的方式來壓制這樣的消息,它就像一個catch 22的情況。要做一些你不能做的事情,你需要獲得許可(所以提升用戶 - > UAC彈出窗口)。

+0

是的,這很令人沮喪。這個項目的限制因素太多,否則我認爲如何避免這種事情有很多好的建議。我也會研究服務,儘管對於這個小應用來說可能會有點負面影響。 – appski

0

我把sgmoore的答案標爲正確的答案,雖然我自己的情況似乎有些陌生,我也想記錄下來。

我已經將我的程序分解爲基礎知識並做了大量的實驗。我發現出於某種原因,他和我實際上可以複製文件並創建文件夾到該目錄中。也許這對steamapps文件夾來說很特別,或者它只是一個讓它在這種有限的情況下工作的錯誤,當它不應該用於「真正的」程序時。

實際上需要UAC提示,奇怪的是,它運行從我的項目最初生成它的\ Bin \ Debug \文件夾的exe。如果我把我的EXE移動到其他地方然後運行它,它可以正常工作。如果我從\ Bin \ Debug \文件夾運行他的exe文件,他也不起作用。我一直無法弄清楚爲什麼。

別的東西,我注意到的是,當我的應用程序會無異常成功,它不與安全警告提示,當我啓動它。它只是默默地打開然後工作。只要它顯示安全警告,它就會失敗。

我猜這個協議會把這兩個問題變成新的問題,但是現在看來它可能已經進入了edgecase/hack領域,因爲你們都同意這根本不應該工作。

我要建立我的計劃退了出來,看看我是否還可以得到它的全部功能下,這些奇怪的環境下工作,還是我將不得不重新啓用UAC提升。

+0

安全警告通常是因爲exe已被標記爲從互聯網下載並且不受信任,然後觸發UAC提示。如果您解封該文件,它是否從bin \ debug文件夾運行?看不到爲什麼移動文件可以解決問題,除非將其移動到Fat Drive。 – sgmoore

+0

http://tinyurl.com/9gymcbz你的意思是解除它像這個例子吧?我的物業上沒有按鈕。 – appski

+0

是的,這就是我的意思。如果按鈕不在那,它必定是一個不同的問題。 – sgmoore

相關問題