Запустите приложение ClickOnce от имени администратора

У меня есть приложение 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

Я попытался выполнить StartProcess для Internet Explorer и указать в качестве аргумента URL-адрес файла .application, который работает до тех пор, пока я не попытаюсь предоставить учетные данные, отличные от моих собственных, и не получу ошибку «не могу найти файл». Если убрать все с п.Имя пользователя на Далее, то приложение открывается, но как пользователь а не администратор. Ниже приведен код для этой попытки.

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

Я совершенно не понимаю, как запустить это приложение от имени администратора, чтобы пользователи могли просматривать файлы и сохранять файлы в этом защищенном месте, используя только это приложение.


person jmease    schedule 28.06.2011    source источник
comment
О, забыл упомянуть, что я также пытался добавить .appref-ms в качестве ссылки на приложение в свой проект и использовал его в области processstartinfo(), и это сработало. Но файл .appref-ms по умолчанию clickonce сохраняет в c:\\user\ , а затем имя пользователя, вошедшего в систему. Поэтому, чтобы это работало, мне нужно было бы иметь возможность динамически изменять этот один раздел моей ссылки на любого пользователя, вошедшего в систему. Так что, если кто-то знает, как это сделать, это может быть проще. Спасибо!   -  person jmease    schedule 28.06.2011


Ответы (2)


Это звучит как отличный кандидат для службы WCF (или другого типа) на сервере. Это предоставит методы делать то, что вы хотите. Клиентское приложение вызовет службу и скажет «поместите этот файл на сервер», а код службы фактически сохранит его. Поскольку он работает на сервере, учетная запись пользователя службы может иметь необходимые привилегии без каких-либо проблем с разрешениями на стороне клиента, с которыми вы сталкиваетесь сейчас. Пользователям-клиентам вообще не нужны никакие привилегии, кроме возможности подключаться к сервису.

Другим преимуществом является то, что у вас нет пароля учетной записи администратора в клиентском приложении, использующем этот метод, что устраняет довольно серьезную проблему безопасности.

person Tridus    schedule 28.06.2011
comment
Спасибо, Тридус. Я не знаком с WCF, но я проверю это. - person jmease; 29.06.2011
comment
Ах. Я определенно понимаю, о чем вы говорите. Но как я могу быть уверен, что методы, представленные в моем WCF, будут работать от имени администратора? - person jmease; 29.06.2011
comment
WCF запускается на сервере, вы можете настроить этот процесс (либо запускаемое приложение прослушивателя, либо конкретный рабочий веб-сервер, если вы размещаете его в IIS) для запуска от имени того, кого вы хотите. Но это не должен быть администратор. Это должен быть пользователь, специально созданный для этого и которому предоставлен доступ к любому каталогу, который ему нужен. - person Tridus; 29.06.2011

Вы не можете повышать разрешения для приложения ClickOnce, и оно не может делать ничего, что требует прав администратора. Идея службы WCF интересна. Единственное, что вы можете сделать, это включить в свое развертывание исполняемый файл, который делает то, что вы хотите, и запустить его с повышенными привилегиями из приложения ClickOnce.

Да, вы не можете запустить приложение ClickOnce с повышенными привилегиями, но оно может запустить процесс, который затем сам повысит привилегии.

person RobinDotNet    schedule 07.07.2011