Программа вылетает после помещения .exe файла на другой компьютер при нажатии кнопки

Я работаю над проектом и сделал код. Этот код отлично работает на моем ноутбуке, но когда я попытался установить файл .exe на другой рабочий стол, он не сработал. После нажатия кнопки он просто вылетел и закрылся. Как я могу это исправить?

Я пробовал несколько мыслей. Например, копирование всей папки решения. Пробовал также сделать установщик для программы. И я также пытался использовать правильный фреймворк, который использовался на рабочем столе. Но все эти усилия ни к чему не привели. Я проверил, и в папке «Ресурсы», которая находится в решении, все изображения в порядке. Извините за весь код, возможно, это небольшая ошибка в большом коде. (Возможно, это может быть проблемой, какие системы я использую)

Код MainWindow Xaml cs

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.Windows.Forms;
using System.Drawing;

namespace Escapehaarlem
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    string hint = "";
    string verwijder = "";
    Window1 win1 = new Window1();


    bool FlagBeer1 = true;
    bool FlagBeer2 = true;
    bool FlagBeer3 = true;
    bool FlagBeer4 = true;
    bool FlagBeer5 = true;
    bool FlagBeer6 = true;

    int index = 1;


    public MainWindow()
    {
        InitializeComponent();
        if (System.Windows.Forms.Screen.AllScreens.Length <= index)
        {
            System.Windows.MessageBox.Show("Tweede scherm is niet aangesloten");
            System.Environment.Exit(1);
        }
        else
        {
            win1.WindowStartupLocation = WindowStartupLocation.Manual;
            System.Windows.Forms.Screen s = System.Windows.Forms.Screen.AllScreens[1];

            System.Drawing.Rectangle r = s.WorkingArea;
            win1.WindowState = System.Windows.WindowState.Normal;
            win1.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual;
            win1.Top = r.Top;
            win1.Left = r.Left;

            win1.Show();
            win1.WindowState = System.Windows.WindowState.Maximized;
        }

    }


    private void Verstuur_Click(object sender, RoutedEventArgs e)
    {
        hint = Textbox.Text;
        win1.UpdateLabel(hint);
        win1.achtergrondfoto();

        if (FlagBeer1 && FlagBeer2 && FlagBeer3 && FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer1 = false;
            win1.RemoveImage();
        }
        else if (FlagBeer2 && FlagBeer3 && FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer2 = false;
            win1.RemoveImage();
        }
        else if (FlagBeer3 && FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer3 = false;
            win1.RemoveImage();
        }
        else if (FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer4 = false;
            win1.RemoveImage();
        }
        else if (FlagBeer5 && FlagBeer6)
        {
            FlagBeer5 = false;
            win1.RemoveImage();
        }
        else if (FlagBeer6)
        {
            FlagBeer6 = false;
            win1.RemoveImage();
        }

    }



    private void Verwijder_Click(object sender, RoutedEventArgs e)
    {
        Textbox.Text = verwijder;
        win1.UpdateLabel(verwijder);
        win1.Achtergrondfotoplaatsten();
    }

    private void Herstel_Click(object sender, RoutedEventArgs e)
    {           

            if (FlagBeer6 == false && FlagBeer5 == false && FlagBeer4 == false && FlagBeer3 == false && FlagBeer2 == false && FlagBeer1 == false)
            {
                FlagBeer6 = true;
                win1.HerstelImage();
            }
            else if (FlagBeer5 == false && FlagBeer4 == false && FlagBeer3 == false && FlagBeer2 == false && FlagBeer1 == false)
            {
                FlagBeer5 = true;
                win1.HerstelImage();
            }
            else if (FlagBeer4 == false && FlagBeer3 == false && FlagBeer2 == false && FlagBeer1 == false)
            {
                FlagBeer4 = true;
                win1.HerstelImage();                    
            }
            else if (FlagBeer3 == false && FlagBeer2 == false && FlagBeer1 == false)
            {
                FlagBeer3 = true;
                win1.HerstelImage();
            }
            else if (FlagBeer2 == false && FlagBeer1 == false)
            {
                FlagBeer2 = true;
                win1.HerstelImage();
            }
            else if (FlagBeer1 == false)
            {
                FlagBeer1 = true;
                win1.HerstelImage();
            }         

    }
    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);

        App.Current.Shutdown();
    }
}
}

Код второго окна xaml cs

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.Shapes;
using System.Windows.Forms;
using System.Timers;
using System.Threading;
using Timer = System.Threading.Timer;


namespace Escapehaarlem
{
public partial class Window1 : Window
{

    bool FlagBeer1 = true;
    bool FlagBeer2 = true;
    bool FlagBeer3 = true;
    bool FlagBeer4 = true;
    bool FlagBeer5 = true;
    bool FlagBeer6 = true;


    bool Beer1 = true;
    bool Beer2 = true;
    bool Beer3 = true;
    bool Beer4 = true;
    bool Beer5 = true;
    bool Beer6 = true;



    private static System.Timers.Timer aTimer;

    public Window1()
    {
        InitializeComponent();
    }

    public void RemoveImage()
    {


        if (FlagBeer1 && FlagBeer2 && FlagBeer3 && FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer1 = false;
            Image.Source = new BitmapImage(new Uri("./Resources/Bierglashalfvol.png"));
            SetTimer();
        }
        else if (FlagBeer2 && FlagBeer3 && FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer2 = false;
            Image1.Source = new BitmapImage(new Uri("./Resources/Bierglashalfvol.png"));
            SetTimer();
        }
        else if (FlagBeer3 && FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer3 = false;
            Image2.Source = new BitmapImage(new Uri("./Resources/Bierglashalfvol.png"));
            SetTimer();
        }
        else if (FlagBeer4 && FlagBeer5 && FlagBeer6)
        {
            FlagBeer4 = false;
            Image3.Source = new BitmapImage(new Uri("./Resources/Bierglashalfvol.png"));
            SetTimer();
        }
        else if (FlagBeer5 && FlagBeer6)
        {
            FlagBeer5 = false;
            Image4.Source = new BitmapImage(new Uri("./Resources/Bierglashalfvol.png"));
            SetTimer();
        }
        else if (FlagBeer6)
        {
            FlagBeer6 = false;
            Image5.Source = new BitmapImage(new Uri("./Resources/Bierglashalfvol.png"));
            SetTimer();
        }
    }

    private void SetTimer()
    {
        // Create a timer with a two second interval.
        aTimer = new System.Timers.Timer(1000);
        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += OnTimedEvent;
        aTimer.AutoReset = false;
        aTimer.Enabled = true;
    }


    private void OnTimedEvent(Object source, ElapsedEventArgs e)
    {

        if (Beer1 && Beer2 && Beer3 && Beer4 && Beer5 && Beer6)
        {
            Beer1 = false;
            this.Dispatcher.Invoke(() =>
            {
                Image.Source = new BitmapImage(new Uri(@"./Resources/bierglasleeg.png"));
            });
        }
        else if (Beer2 && Beer3 && Beer4 && Beer5 && Beer6)
        {
            Beer2 = false;
            this.Dispatcher.Invoke(() =>
            {
                Image1.Source = new BitmapImage(new Uri(@"./Resources/bierglasleeg.png"));
            });
        }
        else if (Beer3 && Beer4 && Beer5 && Beer6)
        {
            Beer3 = false;
            this.Dispatcher.Invoke(() =>
            {
                Image2.Source = new BitmapImage(new Uri(@"./Resources/bierglasleeg.png"));
            });
        }
        else if (Beer4 && Beer5 && Beer6)
        {
            Beer4 = false;
            this.Dispatcher.Invoke(() =>
            {
                Image3.Source = new BitmapImage(new Uri(@"./Resources/bierglasleeg.png"));
            });
        }
        else if (Beer5 && Beer6)
        {
            Beer5 = false;
            this.Dispatcher.Invoke(() =>
            {
                Image4.Source = new BitmapImage(new Uri(@"./Resources/bierglasleeg.png"));
            });
        }
        else if (Beer6)
        {
            Beer6 = false;
            this.Dispatcher.Invoke(() =>
            {
                Image5.Source = new BitmapImage(new Uri(@"./Resources/bierglasleeg.png"));
            });
        }


    }

    public void HerstelImage()
    {


        if (FlagBeer6 == false && FlagBeer5 == false  && FlagBeer4 == false  && FlagBeer3 == false  && FlagBeer2 == false  && FlagBeer1 == false)
        {
            FlagBeer6 = true;
            Image5.Source = new BitmapImage(new Uri(@"./Resources/Bierglashalfvol.png"));
            SetTimer1();
        }
        else if (FlagBeer5 == false && FlagBeer4 == false && FlagBeer3 == false && FlagBeer2 == false && FlagBeer1 == false)
        {
            FlagBeer5 = true;
            Image4.Source = new BitmapImage(new Uri(@"./Resources/Bierglashalfvol.png"));
            SetTimer1();
        }
        else if (FlagBeer4 == false && FlagBeer3 == false && FlagBeer2 == false && FlagBeer1 == false)
        {
            FlagBeer4 = true;
            Image3.Source = new BitmapImage(new Uri(@"./Resources/Bierglashalfvol.png"));
            SetTimer1();
        }
        else if (FlagBeer3 == false && FlagBeer2 == false && FlagBeer1 == false)
        {
            FlagBeer3 = true;
            Image2.Source = new BitmapImage(new Uri(@"./Resources/Bierglashalfvol.png"));
            SetTimer1();
        }
        else if (FlagBeer2 == false && FlagBeer1 == false)
        {
            FlagBeer2 = true;
            Image1.Source = new BitmapImage(new Uri(@"./Resources/Bierglashalfvol.png"));
            SetTimer1();
        }
        else if (FlagBeer1 == false)
        {
            FlagBeer1 = true;
            Image.Source = new BitmapImage(new Uri(@"./Resources/Bierglashalfvol.png"));
            SetTimer1();
        }
    }

    private void SetTimer1()
    {
        // Create a timer with a two second interval.
        aTimer = new System.Timers.Timer(1000);
        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += Verlopenevent;
        aTimer.AutoReset = false;
        aTimer.Enabled = true;
    }

    private void Verlopenevent(Object source, ElapsedEventArgs e)
    {
        if (Beer6 == false && Beer5 == false && Beer4 == false && Beer3 == false && Beer2 == false && Beer1 == false)
        {
            Beer6 = true;
            this.Dispatcher.Invoke(() =>
            {
                Image5.Source = new BitmapImage(new Uri(@"./Resources/Bierglasvol.png"));
            });
        }
        else if (Beer5 == false && Beer4 == false && Beer3 == false && Beer2 == false && Beer1 == false)
        {
            Beer5 = true;
            this.Dispatcher.Invoke(() =>
            {
                Image4.Source = new BitmapImage(new Uri(@"./Resources/Bierglasvol.png"));
            });
        }
        else if (Beer4 == false && Beer3 == false && Beer2 == false && Beer1 == false)
        {
            Beer4 = true;
            this.Dispatcher.Invoke(() =>
            {
                Image3.Source = new BitmapImage(new Uri(@"./Resources/Bierglasvol.png"));
            });
        }
        else if (Beer3 == false && Beer2 == false && Beer1 == false)
        {
            Beer3 = true;
            this.Dispatcher.Invoke(() =>
            {
                Image2.Source = new BitmapImage(new Uri(@"./Resources/Bierglasvol.png"));
            });
        }
        else if (Beer2 == false && Beer1 == false)
        {
            Beer2 = true;
            this.Dispatcher.Invoke(() =>
            {
                Image1.Source = new BitmapImage(new Uri(@"./Resources/Bierglasvol.png"));
            });
        }
        else if (Beer1 == false)
        {
            Beer1 = true;
            this.Dispatcher.Invoke(() =>
            {
                Image.Source = new BitmapImage(new Uri(@"./Resources/Bierglasvol.png"));
            });
        }
    }



    public void achtergrondfoto()
    {
        achtergrondfoto1.Source = null;
    }

    public void Achtergrondfotoplaatsten()
    {
        achtergrondfoto1.Source = new BitmapImage(new Uri(@"./Resources/escapehaarlem_logo1.png"));
    }

    public void UpdateLabel(string text)
    {
        lbl_Tekst.Text = text;
    }
}
}

XAML-код главного окна

<Window x:Class = "Escapehaarlem.MainWindow"
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local = "clr-namespace:Escapehaarlem"
    mc:Ignorable = "d"
    Title = "MainWindow" 
    Height = "350" 
    Width = "560" 
    ResizeMode = "CanResizeWithGrip" 
    Topmost = "False" WindowState = "Normal" 
    WindowStartupLocation = "CenterOwner" 
    Icon = "./Resources/escapehaarlem_logo.ico"
    MinWidth = "300"
    MinHeight = "200">

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width = "3*" />
        <ColumnDefinition Width = "*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height = "0.3*" />
        <RowDefinition Height = "0.3*" />
        <RowDefinition Height = "*" />
        <RowDefinition Height = "0.3*" />
    </Grid.RowDefinitions>
    <Button Name = "Verstuur" Grid.Column = "1" Margin = "2" Click = "Verstuur_Click">Verstuur</Button>
    <Button Name = "Verwijder" Grid.Row = "1" Grid.Column = "2" Margin = "2" Click = "Verwijder_Click">Verwijder</Button>
    <Button Name = "Herstel" Grid.Row = "3" Grid.Column = "2" Margin = "2" Click = "Herstel_Click">Herstel</Button>
    <TextBox MaxLength = "185" FontSize = "20"  TextWrapping = "Wrap" Grid.RowSpan = "4" Name = "Textbox" Margin = "2"></TextBox>
</Grid>

</Window>

XAML-код второго окна

<Window x:Class = "Escapehaarlem.Window1"
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local = "clr-namespace:Escapehaarlem"
    mc:Ignorable = "d"
    Title = "SecondWindow" Height = "1024" Width = "1280" ResizeMode = "NoResize" Topmost = "True" WindowState = "Maximized" Icon = "./Resources/escapehaarlem_logo.ico" WindowStartupLocation = "Manual" WindowStyle = "None">

<Grid Background = "Black">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width = "*"/>
        <ColumnDefinition Width = "*"/>
        <ColumnDefinition Width = "*"/>
        <ColumnDefinition Width = "*"/>
        <ColumnDefinition Width = "*"/>
        <ColumnDefinition Width = "*"/>


    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height = "*" />
        <RowDefinition Height = "0.3*" />
    </Grid.RowDefinitions>
    <Image Name = "achtergrondfoto1" Grid.ColumnSpan = "6" Source = "./Resources/escapehaarlem_logo1.png" Stretch = "None" HorizontalAlignment = "Center" VerticalAlignment = "Center"></Image>
    <TextBlock Grid.ColumnSpan = "6"  Name = "lbl_Tekst" VerticalAlignment = "Top" HorizontalAlignment = "Center" Foreground = "White" Height = "1010" TextWrapping = "Wrap" FontSize = "130" FontFamily = "Broken Planewing"/>
    <Image Source = "./Resources/Bierglasvol.png" Grid.Row = "1" Grid.Column = "5" Name = "Image" Stretch = "None" HorizontalAlignment = "Center" VerticalAlignment = "Center"></Image>
    <Image Source = "./Resources/Bierglasvol.png" Grid.Row = "1" Grid.Column = "4" Name = "Image1" Stretch = "None" HorizontalAlignment = "Center" VerticalAlignment = "Center"></Image>
    <Image Source = "./Resources/Bierglasvol.png" Grid.Row = "1" Grid.Column = "3" Name = "Image2" Stretch = "None" HorizontalAlignment = "Center" VerticalAlignment = "Center"></Image>
    <Image Source = "./Resources/Bierglasvol.png" Grid.Row = "1" Grid.Column = "2" Name = "Image3" Stretch = "None" HorizontalAlignment = "Center" VerticalAlignment = "Center"></Image>
    <Image Source = "./Resources/Bierglasvol.png" Grid.Row = "1" Grid.Column = "1" Name = "Image4" Stretch = "None" HorizontalAlignment = "Center" VerticalAlignment = "Center"></Image>
    <Image Source = "./Resources/Bierglasvol.png" Grid.Row = "1" Grid.Column = "0" Name = "Image5" Stretch = "None" HorizontalAlignment = "Center" VerticalAlignment = "Center"></Image>
</Grid>
</Window>

Извините за весь код, но у меня такое чувство, что это может быть что-то маленькое. Я надеюсь, что он сможет работать на другом рабочем столе.

Пожалуйста, дайте мне знать, если потребуется какая-либо информация

Заранее спасибо.

Вы также скопировали все файлы DLL?

Kristóf Tóth 14.02.2019 13:12

Есть несколько предварительных условий каждого приложения. Прежде всего, это сама .NET Framework, которая должна существовать в правильной версии на целевой машине. Затем необходимо также скопировать все библиотеки, на которые есть ссылки (кроме .NET dll). Затем вам нужно позаботиться о том, чтобы ваше приложение зависело от каких-либо дополнительных файлов, таких как e. г. файлы ресурсов. Ах да, чуть не забыл: поймать ошибку, используя блок try/catch, чтобы узнать, чего не хватает!

Nicolas 14.02.2019 13:14

@KristófTóth Я сделал zip-файл из всего решения, поэтому, если бы он был в нем, он бы их скопировал. Но когда я смотрю в папку, я не могу найти никакой DLL

Bart franken 14.02.2019 13:16

@Nicolas, возможно, глупый вопрос, но почему у меня нет DLL, я думал, что они сделаны автоматически, и как я могу их добавить?

Bart franken 14.02.2019 13:17

@Bart, вы получите dll, если создадите проект библиотеки, в противном случае для вас нет пользовательской dll. Но если вы добавили ссылки на внешние dll, которые не принадлежат .NET, вам придется перенести их с вашим exe на целевую машину. Но вместо того, чтобы угадать, чего не хватает, просто оберните свой код в обработчике событий кнопки в блок try/catch.

Nicolas 14.02.2019 15:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
62
1

Ответы 1

Вы должны скопировать все двоичные файлы из папки bin/{YourBuildConfiguration}, так как ваше приложение копирует только те, которые НЕОБХОДИМЫ, а не только файл .exe.

Обновление согласно вашему комментарию: Вам не нужно создавать zip из решения. Решение заключается в разработке кода. Создание решения создает приложение в качестве вывода, которое по умолчанию выводит в папку {SolutionFolder}/{ProjectName}/bin/Debug или Release. Вы должны заархивировать содержимое этой папки, скопировать его в нужное место (возможно, на другой компьютер), разархивировать и запустить exe. Все необходимые DLL-ки должны находиться прямо рядом с файлом .exe, который вы хотите запустить.

Попробуйте воспроизвести шаги, указанные в ответах это вопросы.

Я сделал это, когда делал установщик и использовал zip-файл для его передачи. Как альтернативные варианты

Bart franken 14.02.2019 13:19

Предоставьте список файлов из папки bin после выполнения сборки решения. Я видел, что вы упомянули, что нет DLL

Kristóf Tóth 14.02.2019 13:44

папка app.publish в файле .exe, манифесте приложения программы, файле .exe, файле конфигурации XML, файле манифеста и отладке программы

Bart franken 14.02.2019 13:54

Другие вопросы по теме