【发布时间】:2011-09-24 12:16:26
【问题描述】:
我有一个 vb.net clickonce 应用程序,将由没有管理员访问权限的低级别人员使用。但是,应用程序本身需要将文件保存到服务器上隐藏的文件夹中,并且只允许管理员进行读/写访问。我需要这些用户能够使用应用程序与此文件夹进行交互,而无需让他们自己浏览到该文件夹。我尝试过使用几种模拟技术,但都没有奏效。
http://weblogs.asp.net/ralfw/archive/2003/11/24/39479.aspx 是我尝试过的一种。它仍然说访问被拒绝,即使当我运行 Return System.Security.Principal.WindowsIdentity.GetCurrent().Name 它返回管理员凭据。
我尝试创建另一个应用程序,该应用程序仅使用管理员凭据执行 StartProcess,但我尝试启动的文件是 .application 而不是 .exe,所以我得到“指定的可执行文件不是有效的应用程序对于此操作系统平台”错误。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim file_name As String = "file path to .application file"
Dim p As New ProcessStartInfo(file_name)
p.UseShellExecute = False
p.Domain = "domain"
p.UserName = "administrator"
p.Password = New System.Security.SecureString()
For Each c As Char In "password"
p.Password.AppendChar(c)
Next
Process.Start(p)
End Sub
我已尝试为 Internet Explorer 执行 StartProcess,并为 .application 文件提供 url 的参数,该参数一直有效,直到我尝试提供我自己的凭据以外的凭据并且我收到“找不到文件”错误。如果我删除从 p.Username 到 Next 的所有内容,应用程序将打开,但以用户而非管理员身份打开。以下是该尝试的代码。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim p As New ProcessStartInfo(My.Computer.FileSystem.SpecialDirectories.ProgramFiles + "\Internet Explorer\IEXPLORE.EXE")
p.UseShellExecute = False
p.Domain = "domain"
p.UserName = "administrator"
p.Password = New System.Security.SecureString()
For Each c As Char In "password"
p.Password.AppendChar(c)
Next
p.Arguments = ("URL to .application file")
Process.Start(p)
End Sub
我完全不知道如何让这个应用程序以管理员身份运行,这样用户就可以只使用这个应用程序查看文件并将文件保存到这个受保护的位置。
【问题讨论】:
-
哦忘了提到我也尝试将 .appref-ms 添加为我的项目的应用程序引用,并在 processstartinfo() 区域中使用它并且它有效。但是 .appref-ms 文件默认情况下 clickonce 存储在 c:\\user\ 然后是登录用户的用户名。因此,为了使其正常工作,我需要能够动态地将我引用的那一部分更改为登录用户。因此,如果有人知道如何做到这一点,它可能会更容易。谢谢!
标签: vb.net clickonce impersonation