Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
1

На отладке работает, но не работает в нужной папке

30.09.2015, 09:38. Просмотров 1386. Ответов 23
Метки нет (Все метки)

Ужас какой то, не могу вычислить в чем ошибка, ведь на отладке и релизе работает, а когда начинаешь пихать в папку где оно должно потом находится... не хочет. Суть программы в том что она скачивает архив, распаковывает его, после чего запускает другую программу распакованную из архива. Это апдейтер. Проблема в том что в нужной папке она не хочет запускать файл "Start Realism2015.exe", а на отладке и в папке релиза он запускается. Код простой и короткий, 2 формы
форма 1:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Threading;
using System.Diagnostics;
 
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
 
        System.Net.WebClient WebClient = new System.Net.WebClient();
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
 
 
        public Form1()
        {
            InitializeComponent();
            Upd();
        }
        
 
        void Upd()
        {
            Uri Uri = new Uri("http://realism2015.ru/realism2015v2/Realism2015v2.7z");
            WebClient.DownloadFileAsync(Uri, "Realism2015v2.7z");
            WebClient.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(WebClient_DownloadProgressChanged);
            WebClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(WebClient_DownloadFileCompleted);
 
        }
        void WebClient_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
        {
            label1.Text = string.Format("Downloading... {0} Kb / {1} Kb", e.BytesReceived / 1024, e.TotalBytesToReceive / 1024);
            progressBar1.Value = e.ProgressPercentage;
        }
        void WebClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            Hide();
            Form2 forma = new Form2();
            forma.ShowDialog();
            Close();
        }
 
        private void progressBar1_Click(object sender, EventArgs e)
        {
 
        }
 
    }
}
форма 2:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Threading;
using System.Diagnostics;
using SevenZip;
 
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        SevenZipExtractor se = new SevenZipExtractor(@"Realism2015v2.7z");
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
 
        public Form2()
        {
            InitializeComponent();
            Ystanovka();
            label1.BackColor = Color.Transparent;
        }
        void Ystanovka()
        {
            se.BeginExtractArchive(@Application.StartupPath);
            se.ExtractionFinished += new EventHandler<EventArgs>(se_ExtractionFinished);
            
        }
 
        void se_ExtractionFinished(object sender, EventArgs e)
        {
            se.Dispose();
            launcher();
        }
 
        void launcher()
        {
            //MessageBox.Show("Update completed");
            string launcher = Application.StartupPath;
            string name = @"\Start Realism2015.exe";
            proc.StartInfo.FileName = launcher + name;
            proc.Start();  // вот тут не запускает.
            Close();
        }
        private void Form2_Load(object sender, EventArgs e)
        {
 
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
    }
}
Посмотрите люди добрые, может я чего то не замечаю или не знаю?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2015, 09:38
Ответы с готовыми решениями:

Программа работает в отладке, но не работает в скомпилированном виде
Доброго времени суток. Появилась не предвиденная проблема :( Не получается разобраться,...

Не работает F10 при отладке
Здравствуйте. При отладке клавиша f10 вместо перехода на следующую строчку открывает настройки...

АЦП работает только в отладке.
Подскажите. Во время дебага АЦП работает хорошо. Но как только заливаю код в процессор, то ничего...

Не работает окно памяти в пошаговой отладке
Здравствуйте, есть вопрос,а точней хотелось бы узнать, то ли это студия не работает,то ли так и...

При отладке не работает WebBrowser1.Navigate
В VB 2010 Экспресс при отладке не работает: WebBrowser1.Navigate(URL) пишет ошибку:...

23
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 09:45 2
Уж сколько раз твердили миру - юзай абсолютные пути...
0
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 09:56  [ТС] 3
я думал это абсолютный путь.
C#
1
2
3
            string launcher = Application.StartupPath;
            string name = @"\Start Realism2015.exe";
            proc.StartInfo.FileName = launcher + name;
подскажи тогда, пожалуйста, как мне абсолютный путь записать, при условии что программа у каждого человека в разных местах может быть?
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 10:01 4
См. метод Path.Combine()

C#
1
2
3
4
5
6
7
8
private string GetExeDirectory()
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            path = Path.GetDirectoryName(path);
            return path;
        }
Добавлено через 2 минуты
Да, и не надо забывать, что некоторые папки установки программ (Program Files) могут быть недоступны для записи.
0
30.09.2015, 10:01
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 10:26  [ТС] 5
Сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        
private string GetExeDirectory()
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            path = Path.GetDirectoryName(path);
            return path;
        }
 
        void launcher()
        {
            MessageBox.Show(GetExeDirectory());
            string path1 = Path.Combine(GetExeDirectory(), "Start Realism2015.exe");
            proc.StartInfo.FileName = path1;
            proc.Start();
            this.Hide();
        }
Это правильно?
В нужной директории, именно в ней (c:\Games\Steam\steamapps\common\SuperPower 2\) не выводится MessageBox.Show(GetExeDirectory());
получается программа прекращается где то до этого кода, как проверить?
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 10:32 6
По идее правильно.
Start Realism2015.exe это имя одного файла, с пробелом?
Проверить можно пошагово, в отладчике.
Можно добавить в GetExeDirectory вывод пути в консоль отладки:
C#
1
2
3
path = Path.GetDirectoryName(path);
System.Diagnostics.Debug.WriteLine(path);
return path;
0
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 10:45  [ТС] 7
Да, нашёл где именно происходит сбой, в процессе распаковки, так что дело даже не доходит до запуска программы, но не понимаю опять же почему. Буду думать. Сейчас пытаюсь найти для SevenZipSharp.dll способ вывода имён каждого распакованного файла в процессе распаковки например в label1, буду признателен если кто то с этим сможет помочь. И все это почему то происходит только в этой папке, причем файлы 100% ничем заняты быть не могут, так как я их удалял и всё равно такая байда.
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 11:07 8
Код распаковки скачанного файла покажите.
0
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:11  [ТС] 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    public partial class Form2 : Form
    {
        SevenZipExtractor se = new SevenZipExtractor(@"Realism2015v2.7z");
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
 
        public Form2()
        {
            InitializeComponent();
            Ystanovka();
            label1.BackColor = Color.Transparent;
        }
 
        void Ystanovka()
        {
            se.BeginExtractArchive(@Application.StartupPath);
            se.ExtractionFinished += new EventHandler<EventArgs>(se_ExtractionFinished);
   
        }
 
        void se_ExtractionFinished(object sender, EventArgs e)
        {
            MessageBox.Show("Распаковка завершена");
            se.Dispose();
            launcher();
        }
Именно в нужной папке до MessageBox.Show("Распаковка завершена"); дело не доходит.
пробовал тут se.BeginExtractArchive(@Application.StartupPath); @Application.StartupPath заменить на данный выше GetExeDirectory()
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 11:16 10
@ пишется для использования спецсимволов (типа '\')без экранирования, переносов строк и зарезервированных ключевых слов. От @"Realism2015v2.7z" и @Application.StartupPath ничего не меняется.
Здесь
C#
1
SevenZipExtractor(@"Realism2015v2.7z");
абсолютный путь к архиву попробуйте указать.
А здесь
C#
1
se.BeginExtractArchive(@Application.StartupPath);
какую-нибудь другую папку.
1
kolorotur
Эксперт .NET
12069 / 9599 / 2460
Регистрация: 17.09.2011
Сообщений: 16,335
Завершенные тесты: 1
30.09.2015, 11:26 11
Цитата Сообщение от aurisdies Посмотреть сообщение
до MessageBox.Show("Распаковка завершена"); дело не доходит.
Попробуйте подписаться на событие окончания распаковки до ее запуска.
1
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:35  [ТС] 12
Вы были правы! если поставить
C#
1
se.BeginExtractArchive(@"c:\Games\Steam\steamapps\common\SuperPower 2\");
то вылетает, а если так
C#
1
se.BeginExtractArchive(@"e:\Documents and Settings\new\Мои документы\Visual Studio 2008\Projects\Launcher\Launcher\bin\Release\");
то работает. Но почему???

Добавлено через 5 минут
Цитата Сообщение от kolorotur Посмотреть сообщение
Попробуйте подписаться на событие окончания распаковки до ее запуска.
что то я не могу допереть, зачем подписываться на событие окончания распаковки до запуска самой распаковки? зачем, по вашему я распаковываю архив? Объясните по подробнее, пожалуйста.
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 11:40 13
Цитата Сообщение от aurisdies Посмотреть сообщение
что то я не могу допереть, зачем подписываться на событие окончания распаковки до запуска самой распаковки? зачем, по вашему я распаковываю архив? Объясните по подробнее, пожалуйста.
Затем, что распаковка может быть завершена раньше, чем вы подпишетесь на событие.
Цитата Сообщение от aurisdies Посмотреть сообщение
Но почему???
А среди распаковываемых файлов есть одноименные уже запущенным EXE, или используемым кем-то DLL?
0
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:44  [ТС] 14
если указать этот путь, то работает.
C#
1
se.BeginExtractArchive(@"c:\Games\Steam\steamapps\common\");
но нужен именно этот
C#
1
se.BeginExtractArchive(@"c:\Games\Steam\steamapps\common\SuperPower 2\");
причем как нибудь через что то подобное ApplicationFilePath'у
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 11:46 15
Ещё раз, когда распаковываете архив в каталог SuperPower 2, запущен Steam или сама игра, или что-то связанное с её библиотеками?
0
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:58  [ТС] 16
Цитата Сообщение от Rius Посмотреть сообщение
Ещё раз, когда распаковываете архив в каталог SuperPower 2, запущен Steam или сама игра, или что-то связанное с её библиотеками?
Цитата Сообщение от Rius Посмотреть сообщение
А среди распаковываемых файлов есть одноименные уже запущенным EXE, или используемым кем-то DLL?
Если бы все было так просто... Но нет, стим не запущен и не был запущен, как и игра, я не запускал ничего этого сегодня, а ночью комп отдыхал. К тому же та же самая проблема наблюдается еще у пары тестеров. Сам Start Realism2015.exe использует SevenZipSharp.dll, однако в любой другой папке все работает (делаю вывод потому что данной проблемы с другими каталогами я не наблюдал, а так же все работает в папке с пиратской версией игры), я даже на всякий случай добавил перед выходом из апдэйтера se.Dispose(); что бы высвободить SevenZipSharp.dll перед запуском Start Realism2015.exe...хоть и без этого ошибок не наблюдалось.
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 12:01 17
Попробуйте распаковать в иной каталог с пробелом в имени.
SevenZipSharp какие-нибудь исключения выдаёт?
0
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 12:02  [ТС] 18
Цитата Сообщение от Rius Посмотреть сообщение
Затем, что распаковка может быть завершена раньше, чем вы подпишетесь на событие.
Всё равно не понял что вы имеете в виду.
имею данный код распаковки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    public partial class Form2 : Form
    {
        SevenZipExtractor se = new SevenZipExtractor(@"Realism2015v2.7z");
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
 
        public Form2()
        {
            InitializeComponent();
            Ystanovka();
            label1.BackColor = Color.Transparent;
        }
 
        void Ystanovka()
        {
            se.BeginExtractArchive(@Application.StartupPath);
            se.ExtractionFinished += new EventHandler<EventArgs>(se_ExtractionFinished);
   
        }
 
        void se_ExtractionFinished(object sender, EventArgs e)
        {
            MessageBox.Show("Распаковка завершена");
            se.Dispose();
            launcher();
        }
Вы имеете ввиду поменять местами se.ExtractionFinished += new EventHandler<EventArgs>(se_ExtractionFinished); и se.BeginExtractArchive(@Application.StartupPath); или что?
0
Rius
Эксперт .NET
6068 / 3912 / 945
Регистрация: 25.05.2015
Сообщений: 11,848
Записей в блоге: 12
Завершенные тесты: 4
30.09.2015, 12:03 19
Цитата Сообщение от aurisdies Посмотреть сообщение
поменять местами se.ExtractionFinished += new EventHandler<EventArgs>(se_ExtractionFinished); и se.BeginExtractArchive(@Application.StartupPath);
Именно.
0
aurisdies
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 12:04  [ТС] 20
Цитата Сообщение от Rius Посмотреть сообщение
Попробуйте распаковать в иной каталог с пробелом в имени.
SevenZipSharp какие-нибудь исключения выдаёт?
распаковал сюда
C#
1
se.BeginExtractArchive(@"c:\Games\Steam\steamapps\common\SP 2\");
запустил отладку, все распаковалось, сообщило об этом, закрылось и открыло Start Realism2015.exe
А да, отладка ни на что не жаловалась, никаких исключений ничего..
0
30.09.2015, 12:04
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2015, 12:04

Qml: singleton не работает в режиме отладке
Всем привет. Создаю новый проект &quot;Qt Quick Application&quot; добавляю в него директорию params в...

Не работает точка останова при отладке
Возникла проблема, когда я пытался настроить публикацию проекта в свойствах поковырялся, после чего...

Не работает печать с формы при отладке
Доброго времени. Создал ВПФ &quot;Универсальный передаточный документ&quot; для бух 3.0 . Если подцепить ее к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru