2010-08-18 75 views
1

我遇到了這個經常說的問題,但即使查找幾乎每一個scource我沒有得到一個aswer。問題如下:訪問「程序文件」所需的文件夾

我寫了一個小更新工具,連接到服務器以檢查應用程序的新版本,然後將新版本複製到clientmashine。所以模式如下:

客戶端安裝由我預先配置的特定應用程序的更新程序。基本上,更新程序位於Program Files文件夾中的某個位置。然後更新程序啓動,連接到我們的服務器並獲取最新版本,並將其安裝到與更新程序安裝在同一目錄中。所以客戶不知道有兩個應用程序。更新程序和更新程序的主要應用程序。我希望你明白這個主意。

所以這就是爲什麼我需要訪問Program Files文件夾。

我在Windows 7下開發,軟件也是在7上運行。

有沒有辦法確保updater是由管理員運行的。我需要管理員權限才能訪問它嗎?即使我擁有管理員權限,它還會拒絕訪問嗎?有沒有辦法在代碼中檢查用戶有什麼權利?

回答

4

我會分裂檢查器和更新器分成兩個不同的應用程序。檢查器可以像普通用戶那樣運行。當它檢測到有更新時,它會啓動更新程序。對於更新程序,您有a manifest that states that it needs admin rights。這將導致用戶被提示授予訪問權限(假定啓用了UAC)。

+0

這就是我所做的。很棒。非常感謝。 – GuyFawkes 2010-08-18 14:38:42

2
0

使用app.manifest在您的應用程序。將requireadministrator設置爲true。或複製粘貼下面的xml

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace the 
      requestedExecutionLevel node with one of the following. 

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

      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
<requestedExecutionLevel level="requireAdministrator" uiAccess="true" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 

上面是一個vb.net應用程序。

相關問題