Запустите приложение ClickOnce от имени администратора - PullRequest
0 голосов
/ 28 июня 2011

У меня есть приложение von.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, который работает, пока я не попытаюсь предоставить учетные данные, отличные от моих, и не получу сообщение об ошибке «Не удается найти файл». Если я удаляю все из 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

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

Ответы [ 2 ]

3 голосов
/ 08 июля 2011

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

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

0 голосов
/ 29 июня 2011

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

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

...