2015-05-01 104 views
0

安裝後的應用程序提供了錯誤Acess Denied。讀取和寫入文件。格蘭特閱讀權限

拒絕訪問該文件PathName\\BLsms.ocx

這裏PatheName是完整路徑。

Advance安裝程序用於創建安裝程序。

然後應用程序安裝在C Drive

如何讓這些文件可讀寫?

我正在使用此代碼。

try 
{ 

    this.brlmfc = new BinaryReader(new FileStream("BLsms.ocx", FileMode.Open, FileAccess.ReadWrite,FileShare.Read)); 
    this.brocx = new BinaryReader(new FileStream("BLrpi.lfc", FileMode.Open,FileAccess.ReadWrite)); 

    this.brlmc = new BinaryReader(new FileStream("rpcgh.lfc", FileMode.Open,FileAccess.ReadWrite)); 
    this.passkey1 = this.brlmfc.ReadString(); 
    this.passkey2 = this.brocx.ReadString(); 

    this.passkey3 = this.brlmc.ReadString(); 

} 
catch (Exception e13) 
{ 
    MessageBox.Show(e13.Message); 
    i = 0; 
} 

我也嘗試了下面的代碼在Form Load方法中。

FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.AllAccess, Application.StartupPath+"\\BLsms.ocx"); 
f2.AddPathList(FileIOPermissionAccess.Read, Application.StartupPath+"\\BLrpi.lfc"); 
f2.AddPathList(FileIOPermissionAccess.Read, Application.StartupPath+"\\Brpcgh.lfc"); 
f2.Demand(); 
+1

您是否正在使用'Application.StartupPath +「BLsms.ocx」'獲得正確的路徑,或者您必須使用'Application.StartupPath +「\ BLsms.ocx」' – Sandeep

+0

是的,我在安裝完文件後。路徑是C:\ Program Files(x86)\ MyFolder \ Myapp \ BLsms.ocx –

+1

請嘗試'FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.AllAccess,Application.StartupPath + @「\ BLsms.ocx」);'也爲其他兩個文件 – Sandeep

回答

1

默認情況下,用戶組在每個計算機位置(如Program Files)中都沒有寫入權限。這是一個與安裝無關的Windows標準。但是,在安裝期間,您可以設置所需的任何權限。

Windows Installer支持自定義權限,但Visual Studio不提供設置它們的方法。所以Visual Studio中唯一的解決方案就是自定義操作。

不幸的是,Visual Studio不支持附加的自定義操作。因此,使用XCACLS.EXE來設置權限只有在您將其包含在您的軟件包中時纔會起作用(它將隨您的文件一起安裝到目標機器上)。

清潔但更復雜的解決方案是自己編寫自定義操作(使用自定義代碼)來設置所需的權限。

最快和最乾淨的解決方案是使用不同的設置創作工具,它提供更多的權限控制。

2

我假設你要安裝的程序到C:\Program FilesC:\Program Files (x86)。不要在這些目錄中寫入。改爲使用C:\ProgramData或用戶的主目錄。

+0

是的,你是對的。如果我將文件寫入其他路徑,那麼這些文件將可以訪問。但是我必須保留所有文件並在這裏​​訪問文件。我想在代碼中手動授予權限。 –

+0

將數據存儲在Program Files目錄中是不合適的。您需要管理員權限才能執行此操作,並且用戶應用程序不應具有管理員權限。程序文件僅適用於程序代碼。只有安裝程序應該將任何東西寫入這些目錄中。你需要重新思考你的過程。 –

+0

@PrettyDoll爲什麼你用'C Drive'粘貼? –

1

我已經設置了來自Advance Installer的文件的讀/寫權限。並且工作正常。

http://www.advancedinstaller.com/user-guide/permission-dialog.html

感謝大家。

+1

請不要複製此鏈接到其他帖子,而不是沒有進一步剪裁問題。你的另一個答案被標記爲astroturfing。請參閱[幫助中心](https://stackoverflow.com/help/promotion)以避免再次被定爲垃圾郵件發送者。 –

+1

我會重複說這是一個可怕的方法。有一個原因,你試圖做的是困難的。不應該這樣做。它打破了很多(大多數)不備份Program Files目錄的備份策略,因爲在安裝之後,應該存在的代碼和不可變的內容都是唯一的。您也可能會發現某些防病毒/防惡意軟件會檢測到這些更改並開始發出警告。如果您需要在終端服務環境中運行您的代碼,那麼您也會遇到問題。 –

+0

如果您嘗試將其部署到使用漫遊配置文件的環境中,並且您希望設置遵循用戶,那麼您也會遇到問題。 –