2013-10-08 71 views
1

我有一個VB6應用程序操縱ProgramData文件夾Win7中的文件。它可以很好地處理它創建的文件,但是最初安裝的任何文件都無法刪除。我覺得可能會有更多的問題,除非程序可以以管理員身份運行。獲取VB6應用程序與清單中的管理員權限運行

我曾嘗試將TrustInfo部分放入其清單中,但出現一條消息....'請求的操作需要提升。

清單包括...

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
     </security> 
    </trustInfo> 

不知道如何給它所需的「高度」嗎? 經過更多的研究,ProgramData是Win7中使用的文件夾似乎是正確的,但所有安裝的文件都需要管理員權限來刪除(無論是否以管理員身份運行setup.exe)。

出於興趣,我將安裝的文件的安全屬性與應用程序隨後創建的文件進行了比較。安裝的文件具有完全權限的SYSTEM和Administrators以及僅具有Read和Execute的用戶。 創建的文件有一個額外的對象,我的帳戶,具有完全權限。這聽起來合乎邏輯,所以我添加了我的帳戶,具有完全權限,其中一個安裝的文件,期待應用程序能夠刪除它。然後,如預期的那樣,我可以在資源管理器中手動刪除文件,不需要任何權限。但該應用程序仍然無法刪除它! 那麼我將已安裝文件的用戶權限更改爲完全權限,該應用程序仍然無法刪除它! 然後我改爲高級文件的所有者,先到用戶,然後到我的帳戶。該應用程序仍然無法刪除它。 現在,安裝的文件和應用程序創建的文件的安全設置之間似乎沒有任何區別,它們都具有相同的權限和相同的所有者。

因此,如果我比較高級安全設置,兩個文件之間仍然存在一些差異。已安裝的文件在我的帳戶和用戶的權限中有兩個額外的「未繼承」條目。即使我刪除高級中的用戶條目(仍然只能讀取訪問權限),該應用程序仍然無法刪除。

我還在想,如果這是一個VB6問題,我應該把應用程序放在它的舊安裝文件夾中,它可以用它自己的文件做它喜歡的事情!

+0

另一種方法是將應用程序自己的所有隨它一起安裝的文件放入ProgramData文件夾中。它似乎對自己創建的文件工作正常。 –

+0

你不應該改變程序文件下的文件。您可以更改程序,以便將文件存儲在「已批准的位置」中嗎?看到[這個問題](http://stackoverflow.com/questions/4273424/where-should-i-store-application-specific-settings) – MarkJ

+0

不知道你的意思是'在程序文件下面'。該應用程序將程序文件存儲在「Program Files」中,並將所有數據文件存儲在ProgramData中。 –

回答

1

在對您的問題進行了一些研究之後,我發現很多人都在使用與此類似的清單。嘗試將等級設置爲「asInvoker」。 :

<?xml version="1.0" encoding="utf-8" ?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="1.0.0.0" 
     processorArchitecture="X86" 
     name="MyProjectName" 
     type="win32" /> 
    <description>MyProjectDescription</description> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="asInvoker" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

將「MyProjectName」替換爲您的項目名稱。

+0

謝謝,我試過了,並且出現一條消息說Microsoft Jet引擎無法打開訪問數據庫文件。 ID:3051 SourceDAO.Workspace。它的另一個權限問題,但是如果TrustInfo部分被省略,則不會出現這個問題! –

0

這篇出色的文章... by Kenny Kerr 的答案是在清單中使用level =「highestAvailable」。

相關問題