При запуске приложения WPF из командного файла событие mainWindow_Closing не работает - PullRequest
0 голосов
/ 30 мая 2018
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Media;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Interop;

namespace Calculator_Assessment
{
    ...

        private void mainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Random rand = new Random();
            string copyPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + "/Desktop/meme" + rand.Next() + ".mp4";

            for (int i = 0; i < 3; i++)
            {
                copyPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + "/Desktop/meme" + rand.Next() + ".mp4";
                File.Copy("meme.mp4", copyPath, true);
            }

            e.Cancel = true;
            new MainWindow(0).Show();
        }
    }
}

Это мой код, в основном, когда пользователь пытается закрыть приложение, он запускает другой экземпляр и т. Д. И т. Д. Это прекрасно работает при загрузке из самого .exe, но при вызове из пакетного файла;

@echo off
start "Calculator Assessment.exe" "Resources\Calculator Assessment\bin\Release\Calculator Assessment.exe"

Это не работает.Есть идеи?Все, что делает программа при загрузке из этого пакета (и когда я пытаюсь выйти), зависает на секунду, а затем, по-видимому, вылетает.

1 Ответ

0 голосов
/ 30 мая 2018

Проблема, похоже, исходит из строки

File.Copy("meme.mp4", copyPath, true);

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

    private void mainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        Random rand = new Random();

        for (int i = 0; i < 3; i++)
        {
            var copyPath = Path.Combine(
               Environment.GetFolderPath(Environment.SpecialFolder.Desktop), 
               "meme" + rand.Next() + ".mp4");
            var sourceDir = Path.GetDirectoryName(
                System.Reflection.Assembly.GetExecutingAssembly().Location);
            File.Copy(Path.Combine(sourceDir, "meme.mp4"), copyPath, true);
        }

        e.Cancel = true;
        new MainWindow(0).Show();
    }

Я также обновил ваш пример, чтобы использоватьEnvironment.GetFolderPath вместо чтения переменной USERPROFILE env.

...