日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Winform程序中设置管理员权限及为用户组添加写入权限

發(fā)布時間:2023/12/9 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Winform程序中设置管理员权限及为用户组添加写入权限 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在我們一些Winform程序中,往往需要具有一些特殊的權(quán)限才能操作系統(tǒng)文件,我們可以設(shè)置運行程序具有管理員權(quán)限或者設(shè)置運行程序的目錄具有寫入的權(quán)限,如果是在操作系統(tǒng)里面,我們可以設(shè)置運行程序以管理員身份運行,或者設(shè)置Users用戶組在運行目錄中具有寫入權(quán)限都可以解決問題,不過如果我們想通過C#代碼進行自動的處理,那么應(yīng)該如何實現(xiàn)呢?

1、系統(tǒng)設(shè)置管理員權(quán)限或者目錄寫入權(quán)限

如果我們需要讓程序以管理員身份運行,那么可以通過設(shè)置快捷方式的屬性或者應(yīng)用程序的屬性為【以管理員身份運行此程序】即可實現(xiàn),如下所示。

如果我們需要一些寫入文件的權(quán)限,如我們程序可能需要操作SQLite文件數(shù)據(jù)庫,那么也可以通過設(shè)置Users用戶組在運行目錄中具有寫入權(quán)限都可以解決問題,否則可能會出現(xiàn)【?attempt to write a readonly database】的錯誤。

我們設(shè)置步驟如下所示:找到SQLite數(shù)據(jù)庫所在的文件夾,單擊右鍵,屬性->安全,為Users用戶組添加寫入權(quán)限。

?

2、使用C#代碼實現(xiàn)

上面的步驟可以解決我們實際碰到的權(quán)限訪問問題,那么我們?nèi)绻褂肅#代碼,應(yīng)該如何實現(xiàn)這些操作呢?

對于第一個以管理員身份運行程序的處理操作,我們是可以通過程序修改配置的方式實現(xiàn),這樣可以避免一些Winform程序運行時刻的權(quán)限問題:

1)在通過winform程序執(zhí)行cmd命令時,某些情況下如果不是以管理員身份運行,則會提示命令無效。

2)或者通過winform程序執(zhí)行Windows Service 服務(wù)時,也需要以管理員身份才能調(diào)用Service服務(wù)。

3)處理其他需要管理員身份的相關(guān)操作。

我們?nèi)绻蔷幾gWinform程序,只需要幾步就可以在讓程序在運行的時候獲得管理員身份,如下所示在我們Winform的UI項目【屬性】【安全性】里面,勾選ClickOne的設(shè)置。

然后我們就可以看到在UI項目【Properties】目錄里面,生成了一個app.manifest文件。

這個app.manifest文件是自動生成的,我們修改其中的一項設(shè)置,然后取消上面勾選ClickOne的設(shè)置就可以了。

把其中app.manifest文件的內(nèi)容:

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

改為:

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

即可,這樣取消上面勾選ClickOne的設(shè)置,然后重新編譯整個程序即可。

在程序運行的時候,會提示“用戶賬戶控制”來獲取管理員權(quán)限運行,點擊“是”則獲取了管理員權(quán)限。

?

對于需要為指定目錄設(shè)置用戶組權(quán)限,那么也是可以通過C#代碼進行處理的。

一般情況下,我們可以在程序安裝或者啟動的時候,對目錄進行用戶組權(quán)限的處理,這樣程序運行起來就自然具有對應(yīng)目錄的讀寫權(quán)限了。

如我們在程序啟動的時候處理,那么我們可以在Main函數(shù)的里面進行設(shè)置。

/// <summary>/// 應(yīng)用程序的主入口點。/// </summary> [STAThread]private static void Main(){}

為了方便處理,我們添加一個公共的函數(shù),用來處理用戶組的目錄權(quán)限訪問操作,C#代碼如下所示。

/// <summary>/// 為指定用戶組,授權(quán)目錄指定完全訪問權(quán)限/// </summary>/// <param name="user">用戶組,如Users</param>/// <param name="folder">實際的目錄</param>/// <returns></returns>private static bool SetAccess(string user, string folder){//定義為完全控制的權(quán)限const FileSystemRights Rights = FileSystemRights.FullControl;//添加訪問規(guī)則到實際目錄var AccessRule = new FileSystemAccessRule(user, Rights,InheritanceFlags.None,PropagationFlags.NoPropagateInherit,AccessControlType.Allow);var Info = new DirectoryInfo(folder);var Security = Info.GetAccessControl(AccessControlSections.Access);bool Result;Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);if (!Result) return false;//總是允許再目錄上進行對象繼承const InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;//為繼承關(guān)系添加訪問規(guī)則AccessRule = new FileSystemAccessRule(user, Rights,iFlags,PropagationFlags.InheritOnly,AccessControlType.Allow);Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);if (!Result) return false;Info.SetAccessControl(Security);return true;}

然后我們在Main函數(shù)里面進行調(diào)用就可以了。

/// <summary>/// 應(yīng)用程序的主入口點。/// </summary> [STAThread]private static void Main(){//為用戶組指定對應(yīng)目錄的完全訪問權(quán)限 SetAccess("Users", Application.StartupPath);//界面漢化System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-Hans");DevExpress.UserSkins.BonusSkins.Register();DevExpress.Skins.SkinManager.EnableFormSkins();Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);//登錄界面Login dlg = new Login();dlg.StartPosition = FormStartPosition.CenterScreen;if (DialogResult.OK == dlg.ShowDialog()){if (dlg.bLogin){SplashScreen.Splasher.Show(typeof(SplashScreen.frmSplash));gc.MainDialog = new MainForm();gc.MainDialog.StartPosition = FormStartPosition.CenterScreen;Application.Run(gc.MainDialog);}}dlg.Dispose();}

這樣在程序運行后,我們就可以看到對應(yīng)目錄具有完全的讀寫操作權(quán)限了,這樣對于一些如讀寫SQLite出錯的問題,也就迎刃而解了。

以上就是我對于兩種不同權(quán)限訪問的處理經(jīng)驗總結(jié),希望給在Winform開發(fā)中的同行參考,感謝耐心的閱讀和支持。

?

總結(jié)

以上是生活随笔為你收集整理的在Winform程序中设置管理员权限及为用户组添加写入权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。