Установщик Inno Setup не требует прав администратора после загрузки и цикла загрузки - PullRequest
3 голосов
/ 29 февраля 2020

Моя игра Unity загружает новую версию установщика с сервера на AppData/LocalLow/MyProject/Temp и пытается запустить ее. Исходный исполняемый файл действительно требует UA C для запуска от имени администратора, как и предполагалось.

PrivilegesRequired=admin

Но когда я загружаю установщик на сервер и загружаю его, возникает ошибка с сообщением «Невозможно создать временную папку. Доступ запрещен».

F C говорит, что это полная копия , но один запрашивает разрешение, другой нет.

Я загружаю файл, конвертируя в byte[] и отправляя его через POST, загружая - GET и наоборот

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


Также в качестве решения я попытался заставить мою игру запустить новый процесс с правами администратора:

Если я использую Mono , Я могу запустить процесс установки через:

new Process
{
    StartInfo =
    {
         Verb = "runas", 
         FileName = Updater.GetPathToInstaller()
    }
}.Start();

Но мне нужно использовать IL2 CPP, а в Unity IL2 CPP пока нет System.Diagnostics.Process, поэтому я использую это решение для запуска моего установщика.

И я не знаю, как заставить его работать с администратором.


Манифест установщика:

я╗┐<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="JR.Inno.Setup" processorArchitecture="x86" version="1.0.0.0" type="win32"></assemblyIdentity>
<description>Inno Setup</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
        </requestedPrivileges>
    </security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
</application>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></supportedOS>
    </application>
</compatibility>
</assembly>

Манифест «Копировать» идентичный

1 Ответ

2 голосов
/ 02 марта 2020

Итак, я выяснил, что моя проблема вызвана тем, что LOW Integrety Level установил установщик после его загрузки. Почему? Потому что я скачал его в Application.persistantDataPath, которая находится в папке LocalLow. Я изменил папку загрузки на Application.dataPath, которая не является постоянной, и в моем сценарии тестирования была на рабочем столе, и она работала нормально - загруженная копия установщика не имеет низкий MI C

Конечно, я мне все еще нужно зарегистрироваться, как @MartinPrikryl упомянул в комментариях, чтобы избежать проблем с умным экраном, но это не решение для моей проблемы "Он не запрашивает разрешение, но все еще нуждается в ней"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...