Не открываются сторонние .exe файлы после сборки проекта Unity 6

Рейтинг: 0Ответов: 2Опубликовано: 17.07.2025

Собираю билд для Windows с вот такой конфигурацией введите сюда описание изображения

В редакторе мой файл прекрасно открывается, но как только я собираю проект он отказывается работать, причём пути до файла я указываю верные. Вот код:

using System.IO;
using TMPro;
using UnityEngine;

public class Class : MonoBehaviour
{
    [SerializeField] private TMP_Text debugText;
    [SerializeField] private TMP_Text debugText2;

    private path = "";
    public void StartGame()
    {
        path = Path.Combine(Application.streamingAssetsPath, "file.exe");
        debugText.text = path;
    }
    public void StartExternalGame()
    {
        debugText2.text = File.Exists(path).ToString();
        try
        {
            Process.Start(path);
        }
        catch (Exception ex)
        {
            debug.text = ex.Message;
        }
    }
}

Я уже пробовал класть файл в StreamingAssets, в папку Документы, в рандомную папку и писать путь самостоятельно. При всём при этом try catch во всех случаях выдаёт Success, но файл не запускается. Файл не только для чтения, он не заблокирован и, опять же, сам по себе и через плеймод он включается, а в билде нет

Ответы

▲ 1Принят

В IL2CPP С# модуля .NET System.Diagnostics.Process по факту на данный момент нет (по документации), а не "не работает", и считается невозможным реализовать так, как он реализован в C# без использования бэкэнда. В 2018 упоминались планы по частичной реализации. Таковая считается ненужной для мобильных и консольных платформ - управление процессами там происходит все равно по-другому.

Так что вызывать его надо из управляемого кода. либо переходить на использование системного API (Platform Invoke), например, CreateProcess для Windows из kernel32.dll.

Вариантом является так же написание своего модуля на другом языке, например, использующего библиотеки из С++. Это может показаться проще чем подбор правильных сигнатур для p/invoke.

▲ 0

Переключил с IL2CPP на Mono и всё заработало...

Но как исправить эту проблему при IL2CPP всё ещё без понятия