Как запросить администрирование привилегий в Windows с Go

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

рассмотрим следующий код:

package main

import (
    "fmt"
    "io/ioutil"
    "time"
)

func main() {
    err := ioutil.WriteFile("C:/Windows/test.txt", []byte("TESTING!"), 0644)
    if err != nil {
        fmt.Println(err.Error())
        time.Sleep(time.Second * 3)
    }
}

Если вы скомпилируете его и дважды щелкните по нему, он напечатает:

открыть: C:\Windows\test.txt: доступ запрещен.

Но если вы щелкните правой кнопкой мыши и запустите его как администратор, он создаст и запишет файл.

Как заставить его запрашивать разрешение администратора, просто дважды щелкнув по нему?

Ответ 1

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

Пример с этой страницы:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="9.0.0.0"
    processorArchitecture="x86"
    name="myapp.exe"
    type="win32"
/>
<description>My App</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

Этот go-nuts post предполагает, что использование rsrc должно сделать трюк для вас.