Я работаю над проектом и сделал код. Этот код отлично работает на моем ноутбуке, но когда я попытался установить файл .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>
Извините за весь код, но у меня такое чувство, что это может быть что-то маленькое. Я надеюсь, что он сможет работать на другом рабочем столе.
Пожалуйста, дайте мне знать, если потребуется какая-либо информация
Заранее спасибо.
Есть несколько предварительных условий каждого приложения. Прежде всего, это сама .NET Framework, которая должна существовать в правильной версии на целевой машине. Затем необходимо также скопировать все библиотеки, на которые есть ссылки (кроме .NET dll). Затем вам нужно позаботиться о том, чтобы ваше приложение зависело от каких-либо дополнительных файлов, таких как e. г. файлы ресурсов. Ах да, чуть не забыл: поймать ошибку, используя блок try/catch, чтобы узнать, чего не хватает!
@KristófTóth Я сделал zip-файл из всего решения, поэтому, если бы он был в нем, он бы их скопировал. Но когда я смотрю в папку, я не могу найти никакой DLL
@Nicolas, возможно, глупый вопрос, но почему у меня нет DLL, я думал, что они сделаны автоматически, и как я могу их добавить?
@Bart, вы получите dll, если создадите проект библиотеки, в противном случае для вас нет пользовательской dll. Но если вы добавили ссылки на внешние dll, которые не принадлежат .NET, вам придется перенести их с вашим exe на целевую машину. Но вместо того, чтобы угадать, чего не хватает, просто оберните свой код в обработчике событий кнопки в блок try/catch.





Вы должны скопировать все двоичные файлы из папки bin/{YourBuildConfiguration}, так как ваше приложение копирует только те, которые НЕОБХОДИМЫ, а не только файл .exe.
Обновление согласно вашему комментарию: Вам не нужно создавать zip из решения. Решение заключается в разработке кода. Создание решения создает приложение в качестве вывода, которое по умолчанию выводит в папку {SolutionFolder}/{ProjectName}/bin/Debug или Release. Вы должны заархивировать содержимое этой папки, скопировать его в нужное место (возможно, на другой компьютер), разархивировать и запустить exe. Все необходимые DLL-ки должны находиться прямо рядом с файлом .exe, который вы хотите запустить.
Попробуйте воспроизвести шаги, указанные в ответах это вопросы.
Я сделал это, когда делал установщик и использовал zip-файл для его передачи. Как альтернативные варианты
Предоставьте список файлов из папки bin после выполнения сборки решения. Я видел, что вы упомянули, что нет DLL
папка app.publish в файле .exe, манифесте приложения программы, файле .exe, файле конфигурации XML, файле манифеста и отладке программы
Вы также скопировали все файлы DLL?