winfrom寫的程式,用vs自帶的打包工具,打包成exe安裝包,在電腦上安裝,安在D盤就可以運行,安在C、F等盤就報錯:對路徑“system volume information”的訪問被拒絕,但是我的代碼沒有涉及這個檔案夾,原始碼不管在哪個盤都能正常運行,但安裝包就不行。注意:原始碼不報錯,安裝包在D盤可正常運行,但安在其他盤運行時會報這個錯?
uj5u.com熱心網友回復:
在線求大佬,急啊uj5u.com熱心網友回復:
查一查是不是權限不夠呀?如果涉及組態檔讀取,要考慮無法正常讀取的問題
如果涉及創建檔案夾,要考慮創建失敗的問題
uj5u.com熱心網友回復:
應該是對檔案沒有完全控制權 你查看一下檔案夾權限看看uj5u.com熱心網友回復:
我現在發現,只要按著他給的路徑安裝,只改按在哪個盤,就完全沒問題,只要改了他給的路徑,不管按在哪個盤,都有問題,這怎么破?uj5u.com熱心網友回復:
應該是權限問題,比如程式運行程序中涉及到讀寫其它檔案,或程式生成檔案,對需要操作的檔案或檔案夾沒有權限。uj5u.com熱心網友回復:
那我在代碼中怎么賦予它權限呢,畢竟別人安裝的時候我不可能去改他們電腦上檔案夾的權限吧?uj5u.com熱心網友回復:
寫個log檔案 捕獲下例外的具體資訊,代碼創建的檔案夾一般都有權限哈uj5u.com熱心網友回復:
你需要在打包之前,能自定義代碼,給予安裝路徑完全寫的權限,沒有寫的權限,打log檔案會出錯,除非你不寫日志了。如何獲取安裝路徑,先找找資料,我現在wpf安裝包,到是有一套完整的解決方案。很多客戶的機子,很奇怪,有些目錄就是木有寫權限,除非,人工改寫,安裝包,看似簡單,我也是陸陸續續幾個月的程序,碰到1個解決2個,是個細活,要1步1步搞。/// <summary>
///為檔案夾添加users,everyone用戶組的完全控制權限
/// </summary>
/// <param name="dirPath"></param>
static void AddSecurityControll2Folder(string dirPath)
{
//獲取檔案夾資訊
DirectoryInfo dir = new DirectoryInfo(dirPath);
//獲得該檔案夾的所有訪問權限
System.Security.AccessControl.DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All);
//設定檔案ACL繼承
InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
//添加ereryone用戶組的訪問權限規則 完全控制權限
FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);
//添加Users用戶組的訪問權限規則 完全控制權限
FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);
bool isModified = false;
dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified);
dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified);
//設定訪問權限
dir.SetAccessControl(dirSecurity);
}
uj5u.com熱心網友回復:
是不是這個參考你沒打包進來?應該把所有用到的參考都打包,再把程式中的參考都換成包里的uj5u.com熱心網友回復:
檢查一下打包的時候是否包含這個路徑,或者有時候涉及C盤某些檔案夾需要權限uj5u.com熱心網友回復:
應該是權限問題,uj5u.com熱心網友回復:
試試以管理員身份運行。uj5u.com熱心網友回復:
權限不夠,先給檔案夾everyone權限,測驗一下。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/87658.html
標籤:C#
下一篇:為什么媒體都需要代碼
