簡體   English   中英

使用.Net Maui 中的進程運行外部應用程序

[英]Run external app using process in .Net Maui

我構建了一個 WPF 應用程序,它使用System.Diagnostics.Process來運行 ffmpeg.exe。 在那里我添加了一個“外部”文件夾來保存 ffmpeg 文件。

在此處輸入圖像描述

然后只是做了類似的事情

new ProcessStartInfo()
{
    FileName = @"External\ffmpeg\bin\x64\ffmpeg.exe",
    ...
}

效果很好。

現在我想將此項目移植到 .Net Maui 以利用其跨平台性,以便我的應用程序可以在 PC 或 Mac 上運行。

我的問題是我在 Maui 項目中的哪里添加 ffmpeg 文件? 我是否只需將它們放在“資源/原始”中並在我的代碼中進行某種檢查以查看使用哪個版本; 我應該在“Platforms/Windows”和“Platforms/MacCatalyst”中創建一個“Resources”文件夾並在那里添加適當的文件嗎?

旁注:我對 Mac 幾乎一無所知。

我想做類似的事情,(在我的情況下,運行 SQL 腳本)並且至少在 Android 下,我需要使腳本嵌入資源,並在運行時將它們復制到應用程序目錄以實際使用文件(或可執行文件) .

這就是我所做的。

private bool CopyDbScriptsToAppData()
{
    string assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    if (assemblyDirectory == null) return false;
    var assembly = Assembly.LoadFrom(Path.Combine(assemblyDirectory, "<assembly>.dll"));
    string prefix = "<assembly>.Resources.Raw.";
    foreach (var res in assembly.GetManifestResourceNames())
    {
        if (res.StartsWith(prefix))
        {
            Stream stream = assembly.GetManifestResourceStream(res);
            if (stream == null)
            {
                _logger.Warning("Could not write resource:{0} to app data.", res);
                continue;
            }
            string fullPath = ResourcePathHelper.PathNameFromResourceName(prefix, res);
            fullPath = Path.Combine(_dbPath, fullPath);
            if (!File.Exists(fullPath))
            {
                string dirName = Path.GetDirectoryName(fullPath);
                if (dirName != null)
                    Directory.CreateDirectory(dirName);
            }
            using FileStream fs = File.OpenWrite(fullPath);
            stream.CopyTo(fs);
            fs.Close();
        }
    }
    return true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM