none
Замена файла с правами администратора WPF (VB.net) RRS feed

  • Вопрос

  • Добрый день. Возникла такая ситуация - Программа работает с файлами во временной папке системы. Но периодически ей нужно заменить из временных файлов свой исполняемый файл, который находится в какой-либо директории.

     'При закрытии окна обновляем программу, если необходимо.
        Private Sub S_Closed(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Closed
            If tmpStatusUPD Then
                If FileIO.FileSystem.DirectoryExists(PathOfTempFiles) Then
                    For Each file In FileIO.FileSystem.GetFiles(PathOfTempFiles)
                        Select Case FileIO.FileSystem.GetFileInfo(file).Extension
                            Case Is = ".exe"
                                'Исполняемый файл. Переименовываем и заменяем
                                Try
                                    'Удаляем, если есть предыдущий исполняемый файл
                                    If FileIO.FileSystem.FileExists(FileIO.FileSystem.GetFileInfo(file).Name & ".bak") Then
                                        FileIO.FileSystem.DeleteFile(FileIO.FileSystem.GetFileInfo(file).Name & ".bak") 'Удаляем
                                    End If
                                    FileIO.FileSystem.RenameFile(FileIO.FileSystem.GetFileInfo(file).Name, FileIO.FileSystem.GetFileInfo(file).Name & ".bak")
                                    FileIO.FileSystem.MoveFile(file, FileIO.FileSystem.GetFileInfo(file).Name, True)
                                Catch ex As Exception
                                    MsgBox("Ошибка")
                                End Try
                        End Select
                    Next
                End If
                'Пробуем запустить
                Try
                    Process.Start("Prog.exe", "-u")
                Catch ex As Exception
                    MsgBox("Не удалось запустить. Запустите программу вручную.")
                End Try
            End If
        End Sub
    При замене файла часто требуются права администратора, так как исполняемый файл находится в системной папке. Как можно заменить этот файл, но сохранить СlickOnce и не запускать программу от имени администратора? Есть возможность через программу попросить права у пользователя для копирования файла в эту директорию и обработать ошибку, если у пользователя не будет прав?

    14 июня 2019 г. 11:16

Ответы

  • Насколько уже заметен тренд, большинство приложений уставливается в AppData\Local, нежели в Program files, так как с правами и управлением приложения легче. Так что может стоит посмотреть в эту сторону.

    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    17 июня 2019 г. 13:00
    Модератор

Все ответы

  • Здравствуйте,

    Рассмотрите ответы здесь: How to guarantee permanent administrator priviligies to my WPF Application

    Ссылки правда устаревшие там.

    Можете также поискать здесь:


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    14 июня 2019 г. 11:51
    Модератор
  • В манифесте если выставляем, то программа будет при каждом запуске требовать права администратора? Реально как-то сделать временный доступ только для копирования одного файла?

    Лучше будет реализовать это - запустив другой процесс для копирования и замены и последующего запуска программы опять с правами пользователя? Или лучше обойтись одним процессом?

    14 июня 2019 г. 12:00
  • Еще такой момент. Я использовал ранее вариант с изменением манифеста и отключением ClickOnce. Программа всегда запускалась с правами администратора. Но Были случаи, когда по каким-то причинам файл не копировался в папку с программой - не происходило вообще ничего. Может ли быть такое, что даже имея права администратора программа не скопирует файл в системную директорию Program Files?
    14 июня 2019 г. 12:06
  • Без соглашения со стороны пользователя не получить права админа. А почему не копировалось, не могу сказать, с правами администратора у программы должен быть такой же доступ как и у пользователя. Закрытые директории вроде есть, но доступ к ним ограничен по понятным причинам. Не думаю, что Program Files из этого списка.


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    14 июня 2019 г. 12:43
    Модератор
  • Лучше будет реализовать это - запустив другой процесс для копирования и замены и последующего запуска программы опять с правами пользователя? Или лучше обойтись одним процессом?

    Тут сколько людей, столько и мнений. Раз вы считаете, что не стоит пугать пользователя с запросом прав админа на основное приложение, то тогда действительно лучше запускать обновление отдельным процессом с правами админа.
    14 июня 2019 г. 13:54
  • Насколько уже заметен тренд, большинство приложений уставливается в AppData\Local, нежели в Program files, так как с правами и управлением приложения легче. Так что может стоит посмотреть в эту сторону.

    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    17 июня 2019 г. 13:00
    Модератор