33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246

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

30.09.2015, 09:38. Показов 3879. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2015, 09:38
Ответы с готовыми решениями:

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

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

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

23
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 09:45
Уж сколько раз твердили миру - юзай абсолютные пути...
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 09:56  [ТС]
я думал это абсолютный путь.
C#
1
2
3
            string launcher = Application.StartupPath;
            string name = @"\Start Realism2015.exe";
            proc.StartInfo.FileName = launcher + name;
подскажи тогда, пожалуйста, как мне абсолютный путь записать, при условии что программа у каждого человека в разных местах может быть?
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 10:01
См. метод 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
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 10:26  [ТС]
Сделал так:
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\SuperPo wer 2\) не выводится MessageBox.Show(GetExeDirectory());
получается программа прекращается где то до этого кода, как проверить?
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 10:32
По идее правильно.
Start Realism2015.exe это имя одного файла, с пробелом?
Проверить можно пошагово, в отладчике.
Можно добавить в GetExeDirectory вывод пути в консоль отладки:
C#
1
2
3
path = Path.GetDirectoryName(path);
System.Diagnostics.Debug.WriteLine(path);
return path;
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 10:45  [ТС]
Да, нашёл где именно происходит сбой, в процессе распаковки, так что дело даже не доходит до запуска программы, но не понимаю опять же почему. Буду думать. Сейчас пытаюсь найти для SevenZipSharp.dll способ вывода имён каждого распакованного файла в процессе распаковки например в label1, буду признателен если кто то с этим сможет помочь. И все это почему то происходит только в этой папке, причем файлы 100% ничем заняты быть не могут, так как я их удалял и всё равно такая байда.
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 11:07
Код распаковки скачанного файла покажите.
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:11  [ТС]
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.Star tupPath); @Application.StartupPath заменить на данный выше GetExeDirectory()
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 11:16
@ пишется для использования спецсимволов (типа '\')без экранирования, переносов строк и зарезервированных ключевых слов. От @"Realism2015v2.7z" и @Application.StartupPath ничего не меняется.
Здесь
C#
1
SevenZipExtractor(@"Realism2015v2.7z");
абсолютный путь к архиву попробуйте указать.
А здесь
C#
1
se.BeginExtractArchive(@Application.StartupPath);
какую-нибудь другую папку.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
30.09.2015, 11:26
Цитата Сообщение от aurisdies Посмотреть сообщение
до MessageBox.Show("Распаковка завершена"); дело не доходит.
Попробуйте подписаться на событие окончания распаковки до ее запуска.
1
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:35  [ТС]
Вы были правы! если поставить
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
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 11:40
Цитата Сообщение от aurisdies Посмотреть сообщение
что то я не могу допереть, зачем подписываться на событие окончания распаковки до запуска самой распаковки? зачем, по вашему я распаковываю архив? Объясните по подробнее, пожалуйста.
Затем, что распаковка может быть завершена раньше, чем вы подпишетесь на событие.
Цитата Сообщение от aurisdies Посмотреть сообщение
Но почему???
А среди распаковываемых файлов есть одноименные уже запущенным EXE, или используемым кем-то DLL?
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:44  [ТС]
если указать этот путь, то работает.
C#
1
se.BeginExtractArchive(@"c:\Games\Steam\steamapps\common\");
но нужен именно этот
C#
1
se.BeginExtractArchive(@"c:\Games\Steam\steamapps\common\SuperPower 2\");
причем как нибудь через что то подобное ApplicationFilePath'у
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 11:46
Ещё раз, когда распаковываете архив в каталог SuperPower 2, запущен Steam или сама игра, или что-то связанное с её библиотеками?
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 11:58  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Ещё раз, когда распаковываете архив в каталог SuperPower 2, запущен Steam или сама игра, или что-то связанное с её библиотеками?
Цитата Сообщение от Rius Посмотреть сообщение
А среди распаковываемых файлов есть одноименные уже запущенным EXE, или используемым кем-то DLL?
Если бы все было так просто... Но нет, стим не запущен и не был запущен, как и игра, я не запускал ничего этого сегодня, а ночью комп отдыхал. К тому же та же самая проблема наблюдается еще у пары тестеров. Сам Start Realism2015.exe использует SevenZipSharp.dll, однако в любой другой папке все работает (делаю вывод потому что данной проблемы с другими каталогами я не наблюдал, а так же все работает в папке с пиратской версией игры), я даже на всякий случай добавил перед выходом из апдэйтера se.Dispose(); что бы высвободить SevenZipSharp.dll перед запуском Start Realism2015.exe...хоть и без этого ошибок не наблюдалось.
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 12:01
Попробуйте распаковать в иной каталог с пробелом в имени.
SevenZipSharp какие-нибудь исключения выдаёт?
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 12:02  [ТС]
Цитата Сообщение от 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_ExtractionFin ished); и se.BeginExtractArchive(@Application.Star tupPath); или что?
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,035
Записей в блоге: 14
30.09.2015, 12:03
Цитата Сообщение от aurisdies Посмотреть сообщение
поменять местами se.ExtractionFinished += new EventHandler<EventArgs>(se_ExtractionFin ished); и se.BeginExtractArchive(@Application.Star tupPath);
Именно.
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
30.09.2015, 12:04  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Попробуйте распаковать в иной каталог с пробелом в имени.
SevenZipSharp какие-нибудь исключения выдаёт?
распаковал сюда
C#
1
se.BeginExtractArchive(@"c:\Games\Steam\steamapps\common\SP 2\");
запустил отладку, все распаковалось, сообщило об этом, закрылось и открыло Start Realism2015.exe
А да, отладка ни на что не жаловалась, никаких исключений ничего..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2015, 12:04
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru