我有一个vb.net clickonce应用程序,将由没有管理员访问权限的低级人员使用。但是,应用程序本身需要将文件保存到隐藏的服务器上的文件夹中,并且只允许对管理员进行读/写访问。我需要这些用户能够使用该应用程序与该文件夹进行交互,而无需让他们自己浏览该文件夹。我尝试过使用几种模仿技术,但都没有。
http://weblogs.asp.net/ralfw/archive/2003/11/24/39479.aspx是我尝试过的。它仍然表示访问被拒绝,即使我运行Return System.Security.Principal.WindowsIdentity.GetCurrent()。名称它返回管理员凭据。
我尝试使用管理员凭据创建另一个只使用StartProcess的应用程序,但我尝试启动的文件是.application而不是.exe所以我得到“指定的可执行文件不是有效的应用程序对于这个OS平台“错误。
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并提供一个参数,该.lip文件的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
我绝对不知道如何以管理员身份运行此应用程序,因此用户只需使用此应用程序即可查看文件并将文件保存到此受保护位置。
答案 0 :(得分:3)
您无法提升ClickOnce应用程序的权限,也无法执行任何需要管理权限的操作。 WCF服务的想法很有趣。您可以做的唯一其他事情是在部署中包含一个执行您希望它执行的操作的exe文件,并使用ClickOnce应用程序中提升的权限运行它。
是的,没错,您无法使用提升的权限运行ClickOnce应用程序,但它可以启动一个可以随后提升权限的进程。
答案 1 :(得分:0)
这听起来像是服务器上WCF(或其他类型)服务的理想选择。这将提供做你想要的方法。客户端应用程序将调用该服务并说“将此文件放在服务器上”,服务代码实际上是保存它的。由于它在服务器上运行,因此服务的用户帐户可以拥有必要的权限,而不会出现您现在面临的任何客户端权限问题。除了能够连接到服务之外,客户端用户根本不需要任何权限。
另一个好处是,您的客户端应用程序中没有使用此方法的管理员帐户密码,这将消除相当严重的安全问题。