【发布时间】:2021-04-25 12:18:14
【问题描述】:
我正在尝试将 AutoCAD 用户的设置存储在他们的 Program Files 下的目录中。最初,我将所有内容都存储在用户收藏夹文件夹中,但我想将所有插件文档/文件保存在同一目录中。所以,我一直在尝试各种选项来在运行时获得管理员权限,但仍然没有成功。这或多或少是我最近测试的:
Public Shared Sub GetAdminAccess()
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
Dim curIdentity As WindowsIdentity = WindowsIdentity.GetCurrent()
Dim principalPerm As PrincipalPermission = New PrincipalPermission(Nothing, "BUILTIN\Administrators")
principalPerm.Demand()
End Sub
<PrincipalPermissionAttribute(SecurityAction.Demand, Role:="BUILTIN\Administrators")>
Private Shared Sub CreateSettingsFile()
Try
IO.File.Create(SettingsFilePath)
SettingsFileData = DefaultFileData
Property_WindowsOnTop = True
Property_SaveBackups = False
Property_SkipCreateSite = False
Property_AlignmentZoomExtents = ToFullExtents
Property_SaveBackups_Method = _TxtValue_Generic_None
Property_SaveBackups_MainDirectoryPath = _TxtValue_Generic_None
Call SetUserSettings(SettingsFileData)
Call SetPropertySettings()
Catch IOE As IO.IOException
MsgBox(IOE.Message)
Catch Ex As Exception
MsgBox(Ex.Message)
End Try
End Sub
我的许多尝试都导致了同样的错误:
“应用程序尝试执行安全策略现在允许的操作。要授予此应用程序所需的权限,请联系您的系统管理员,或使用 Microsoft.NET Framework 配置工具。
如果您单击继续,应用程序将忽略此错误并尝试继续。
请求主体权限失败。"
【问题讨论】:
-
没有管理员权限的应用程序无法写入 Program Files 文件夹。不要这样做。如果您想要一个共享的、特定于应用程序的位置,请写入文件夹 AppData (
System.Environment.SpecialFolder.ApplicationData) -
@Flydog57 我接受了你的建议。我很高兴我也这样做了,因为现在每次重新安装更新的插件时都不会替换 Settings.txt。这正是我从一开始就希望实现的目标。我认为这是特定于该目录的?当存储在任何其他目录中时,txt 文档将始终被替换。无论如何,出于好奇,为什么不应该获得管理员权限来更改 Program Files 目录中的文档?
-
程序文件夹(及其下的子文件夹)受管理员保护,以防止程序用恶意等效程序替换已安装的可执行代码。如果需要使用 appData 文件夹的特定于应用程序的数据。我喜欢对设置文件做的事情(特别是如果它们是每个用户的)是使用 IsolatedStorage。我通常将我的设置保存在一个 XML 文件(具有特定于应用程序的架构)中,我在应用程序启动时从独立存储中读取该文件,并在应用程序关闭时写回该文件
-
我添加了一个答案,以便您的问题有一个明确的答案(即,这就是本网站的目的)。如果它有用,请投票。如果它解决了您的问题,请接受它。
-
谢谢@Flydog57!我尝试对其进行投票,但我需要 15 个声望点才能将其公开。但是,我会在此消息中明确表示,我 100% 同意并感谢您的帮助。我对编程非常陌生,以前从未真正接触过这样的人,所以我很无知。我正在努力进入学校尽可能多地学习。理想情况下,我很想知道关于计算机的一切;但我知道这对一个人来说是不可能的。如果您有任何可以帮助我学习编程的建议,请告诉我。
标签: vb.net permissions autocad program-files