VB.NET中的启动文件夹权限
我正在开发一个应用程序,只需点击一个按钮即可安装公司的所有定制软件。列表中包括一个资产跟踪/报告工具,每个人都必须在启动时运行该工具。我们的标准版本(我对此没有任何控制权)是Windows 10,我们也有一些传统的Windows 7机器,但在每种情况下,启动注册表项都被锁定,因此我开始在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\startup中创建快捷方式 如果启动文件夹不存在,则会创建该文件夹。以本地管理员身份登录,我可以在不弹出UAC的情况下手动创建启动文件夹,获得文件夹的所有权,并分配每个人都有修改权限,在其中创建快捷方式。当我注销/登录时,软件会运行。但是,当我编写此代码时,会出现权限错误 代码如下:VB.NET中的启动文件夹权限,vb.net,permissions,windows-10,Vb.net,Permissions,Windows 10,我正在开发一个应用程序,只需点击一个按钮即可安装公司的所有定制软件。列表中包括一个资产跟踪/报告工具,每个人都必须在启动时运行该工具。我们的标准版本(我对此没有任何控制权)是Windows 10,我们也有一些传统的Windows 7机器,但在每种情况下,启动注册表项都被锁定,因此我开始在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\startup中创建快捷方式 如果启动文件夹不存在,则会创建该文件夹。以本地管理员身份登录,我可以在不弹出
Sub DetectFolders()
Dim sFolder1 As String = "C:\My Apps\"
Dim sFolder2 As String = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\"
Dim sFolder3 As String = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\"
If Not Directory.Exists(sFolder1) Then
Directory.CreateDirectory(sFolder1)
End If
If Not Directory.Exists(sFolder2) Then
Try
' create folder
TakeOwnership(sFolder3)
Application.DoEvents()
AddDirectorySecurity(sFolder3, "MyDomain\" & Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow)
Application.DoEvents()
Directory.CreateDirectory(sFolder2)
Application.DoEvents()
TakeOwnership(sFolder2)
' everyone has modify access // TEST
AddDirectorySecurity(sFolder2, "Everyone", FileSystemRights.Modify, AccessControlType.Allow)
Catch ex As Exception
MessageBox.Show(ex.Message, "Config", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.Close()
End Try
End If
End Sub
Sub TakeOwnership(ByVal sfolder As String)
' take ownership
Try
Dim ds As System.Security.AccessControl.DirectorySecurity
Dim account As System.Security.Principal.NTAccount
ds = System.IO.Directory.GetAccessControl(sfolder, System.Security.AccessControl.AccessControlSections.Owner)
account = New System.Security.Principal.NTAccount(System.Security.Principal.WindowsIdentity.GetCurrent.Name)
ds.SetOwner(account)
System.IO.Directory.SetAccessControl(sfolder, ds)
Application.DoEvents()
Catch ex As Exception
MessageBox.Show("" & ex.Message & "", "Take Ownership", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Sub AddDirectorySecurity(ByVal FileName As String, ByVal Account As String, ByVal Rights As FileSystemRights, ByVal ControlType As AccessControlType)
Try
' Create a new DirectoryInfoobject.
Dim dInfo As New DirectoryInfo(FileName)
' Get a DirectorySecurity object that represents the
' current security settings.
Dim dSecurity As DirectorySecurity = dInfo.GetAccessControl()
' Add the FileSystemAccessRule to the security settings.
dSecurity.AddAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
' Set the new access settings.
dInfo.SetAccessControl(dSecurity)
Catch ex As Exception
MessageBox.Show("" & ex.Message & "", "Add Security", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
出现的前两个错误是:试图执行未经授权的操作,该操作是在首次调用AddDirectorySecurity和TakeOwnership时生成的
然后,我得到一个错误,它表明:
对路径“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup”的访问被拒绝
这是从DetectFolders子目录中的directory.createdirectory行生成的
我很快就开始没有办法让它工作了。我的代码里有什么东西吗?是我遗漏了什么,还是windows 10不能以这种方式工作。我们将非常感谢您提供的任何建设性帮助。您是否以管理员身份运行vb应用程序?这是一个clickonce应用程序,但在尝试了一些东西后,我将更改它,因为clickonce看起来无法提升。我真的需要更多的咖啡因。快捷方式的“开始位置”文件夹指向正确的位置吗?你试过使用“开始位置”而不是快捷方式吗?看看这里。。这可能会有帮助,但当然可能不会你是否以管理员的身份运行vb应用程序?这是一个clickonce应用程序,但在尝试了一些东西后,我改变了它,因为clickonce看起来无法提升。我真的需要更多的咖啡因。快捷方式的“开始位置”文件夹指向正确的位置吗?你试过使用“开始位置”而不是快捷方式吗?看看这里。。这可能会有帮助,但当然可能不会