Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
1

Запуск определенной формы с помощью if/else, по состоянию значения ключа EnableLUA

17.02.2016, 04:06. Показов 1516. Ответов 22

Author24 — интернет-сервис помощи студентам
Всем привет
я только начал учится и пытаюсь написать прогу которая устанавливает нужный мне софт без участия юзера (запустил и пошел кофе пить)
проблема в том что некоторый софт при запуске запрашивает UAC и нужно нажимать кнопку "да" чтобы чтото установитьб ну и так далее...
Задумка вот какая:
Запуск проги она проверяет значение ключа "EnableLUA" в регистре и открывает форму в зависимости от того какое значение имеет ключ "0" или "1"
Перелапатил уже все что мог но почемуто не получается запустить нужную мне форму
Очень прошу помосчи
мой код:

C#
1
2
3
4
5
6
7
8
9
10
11
RegistryKey readKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
 
if (readKey.GetValue == "0")
            {
                Application.Run(new CheckBox());
                
            }
            else
            {
                Application.Run(new UACoff());
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2016, 04:06
Ответы с готовыми решениями:

Присвоение значения ключа при заполнении формы
У меня в одной форме параллельно заполняются 2 таблицы Klient и Connect, В Клиенте первичный ключ,...

Изменение значения элементов формы после нажатия определенной клавиши
Нужно сотворить следующее. Есть форма с кнопкой "Привет", после нажатия на которую появляется...

Нажатие определенной клавиши на клавиатуре = Запуск определенной функции
Здравствуйте. У меня такой вопрос: как при нажатии, к примеру, клавиши "1" на клавиатуре запустить...

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

22
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
17.02.2016, 04:31 2
Лучший ответ Сообщение было отмечено Steroid как решение

Решение

Steroid, enableLUA имеет тип REG_DWORD. Значит его нужно читать как int значение.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int enableLua;
using (RegistryKey readKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"))
{
    enableLua = (int)readKey.GetValue("EnableLUA", 0);
}
if (enableLua == 0)
{
    Application.Run(new CheckBox());
}
else
{
    Application.Run(new UACoff());
}
В данном случае я бы просто всегда запускал главное приложение с правами администратора. Тогда дочерние процессы наследуют это и подтверждение UAC не потребуется.
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
18.02.2016, 02:52  [ТС] 3
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
namespace test
{
    static class Program
    {
        
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Start first = new Start();
            DateTime end = DateTime.Now + TimeSpan.FromSeconds(2);
            first.Show();
            while (end > DateTime.Now)
            {
                Application.DoEvents();
            }
            first.Close();
            first.Dispose();
//отсюда начинается проверка реестра и запуск формы
            int enableLua;
            using (RegistryKey readKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"))
            {
                enableLua = (int)readKey.GetValue("EnableLUA", 0);
            }
            if (enableLua == 0)
            {
                Application.Run(new CheckBox()); //почемуто запускается только это значение
            }
            else
            {
                Application.Run(new UACaus());
            }
 
        }
    }
}
Спасибо большое за быстрый ответ!
Но происходит тоже самое что и до этого всегда запускается та форма которая находится в if
я уже настроил чтоб стартовала с правами админа

пояснение:
старт программы, она проверяет отключенно UAC или нет, если отключено то запускается форма с чекбоксами, если нет форма форма с кнопкой отключающей UAC и перезагрузка компа, после перезагрузки прога стартует автоматически в форму с чекбоксами, ну и дальше чекбоксы выбираются для инсталяции и тд

Добавлено через 7 часов 32 минуты
не не получается

Добавлено через 11 часов 54 минуты
пуш

Добавлено через 1 час 9 минут
пуш

Добавлено через 30 минут
OwenGlendower,
неполучается

Добавлено через 47 минут
есть кто живой?
0
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
18.02.2016, 19:49 4
Steroid, так а ключ в реестре есть?
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
20.02.2016, 04:45  [ТС] 5
у меня виртуальная винда, где я скрипт тестировал, тупила чтото
твой код работает как надо
Благодарен за помощь
0
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
22.02.2016, 00:27  [ТС] 6
OwenGlendower,
Снова проблемма:

Запуск проги как Админ
Интро на 5 секунд
Запуск формы выключения UAC, если включено, или запуск формы с чекбоксами выбора програм для установки (что проверяется кодом выше)

Форма запускается нормально, после выбора чекбокса и при нажатии на кнопку Install, почемуто выкидывает ошибку, (в которой я понять ничего не могу, не никаких ссылок на строку или чтото такое,) в которой можно продолжить или закрыть форму


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
namespace ComputerCenter01
{
    public partial class CheckBox : Form
    {
        DirectoryInfo di = new DirectoryInfo(@"C:\Data");
        WebClient wc = new WebClient();
        public CheckBox()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        /*Button "Installieren"*/
        {
            
            ProcessStartInfo pi = new ProcessStartInfo();
            
            if (di.Exists)
                di.Delete(true);
            di.Create();
            
            //Google Chrome
            if (checkBox1.Checked)
            {
                wc.DownloadFile("https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7BA01E3D89-12EB-73E8-42E4-35DB1881DC3F%7D%26lang%3Dde%26browser%3D4%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe", @"C:\\Data\\ChromeSetup.exe");
            
            Chrome:
                if (File.Exists(@"C:\Data\ChromeSetup.exe"))
                {
                    goto next;
                }
                else
                {
                    goto Chrome;
                }
            next:
                pi.Arguments = "/S";
                pi.FileName = @"C:\Data\ChromeSetup.exe";
                Process.Start(pi).WaitForExit();
            }
            
 
            if (checkBox2.Checked)
            {
                wc.DownloadFile("https://download-installer.cdn.mozilla.net/pub/firefox/releases/42.0/win32/de/Firefox%20Setup%20Stub%2042.0.exe", @"C:\\Data\\Mozilla.exe");
 
            Mozilla:
                if (File.Exists(@"C:\Data\Mozilla.exe"))
                {
                    goto next;
                }
                else
                {
                    goto Mozilla;
                }
            next:
                pi.Arguments = "/S";
                pi.FileName = @"C:\Data\Mozilla.exe";
                Process.Start(pi).WaitForExit();
Это часть кода далее. все похоже
0
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
22.02.2016, 07:24 7
Лучший ответ Сообщение было отмечено Steroid как решение

Решение

Steroid, без исключения можно только гадать. Приведенный код хоть и ужасен, но видимых ошибок не содержит. Приведи хотя бы тип исключения и его текст.

Вообще же код нуждается в рефакторинге. Отмечу несколько моментов.
  • Проверка существования файла путем постоянного вызова File.Exists без паузы между ними плохая идея. Мне вообще непонятно зачем это нужно, но если уж так поступать, то стоит добавить Thread.Sleep между ними. Угара добавляет использование goto в котором нет необходимости и который можно заменить на цикл.
  • Длинная простыня одинакового кода несложно переписывается в обобщенный код. Смотри код ниже.
  • CheckBox это неудачное названия для класса формы потому что создает путаницу с одноименным элементом управления.
  • Название метода button1_Click с комментарием /*Button "Installieren"*/ намекает что не мешает дать button1 нормальное название (installButton, например) и одновременно переименовать обработчик. Тогда никакой необходимости в комментарии не будет. Ну и checkbox-ы тоже стоит переименовать.

Кликните здесь для просмотра всего текста
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
private void installButton_Click(object sender, EventArgs e)
{
    const string installerRoot = @"C:\Data";
    if (Directory.Exists(installerRoot))    
    {
        Directory.Delete(installerRoot, true);
    }
    Directory.CreateDirectory(installerRoot);
    
    var installers = new[] {
        new {
            CheckBox = checkBox1,
            Url = "https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7BA01E3D89-12EB-73E8-42E4-35DB1881DC3F%7D%26lang%3Dde%26browser%3D4%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe",
            FileName = "ChromeSetup.exe",
            Arguments = "/S"
        },
        new {
            CheckBox = checkBox2,
            Url = "https://download-installer.cdn.mozilla.net/pub/firefox/releases/42.0/win32/de/Firefox%20Setup%20Stub%2042.0.exe",
            FileName = "Mozilla.exe",
            Arguments = "/S"
        },
        // и т.д.
    };
    
    foreach (var installer in installers)
    {
        if (!installer.CheckBox.Checked) continue;
        
        string installerPath = Path.Combine(installerRoot, installer.FileName);
        using (var web = new WebClient())
        {
            web.DownloadFile(installer.Url, installerPath);
        }
        
        while (!File.Exists(installerPath))
        {
            Thread.Sleep(50);
        }
        
        using (var proc = Process.Start(installerPath, installer.Arguments))
        {
            proc.WaitForExit();
        }
    }
}
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
23.02.2016, 00:53  [ТС] 8
Спасибо за ответ
Отпишусь позже когда домой вернусь
счас времени маловато

Добавлено через 8 часов 45 минут
OwenGlendower,

я начал изучать C# недели 3 назад, но пока мало чего знаю, и очень благодарен за помошь.

То что код УЖАСЕН я спредпологал

я пока не знаю про какие исключения ты говоришь и, зачем они нужны

File.Exist я прописал, так как мне не понравился Thread.Sleep, потомучто не всегда точно можно прописать время ожидания, особенно если трафик интернета разный, расчитать трудно сколько поставить ожидание.
Также не хочется стартовать следующий процес раньше чем завершился предыдущий... незнал как лучше прописать, в принципе и досих пор не совсем понял чем Thread.Sleep лучше

C:\Data это не папка для инсталяции, а просто временная папка куда идут все скачивания и оттуда происходит установка, папка будет удалена после установки всех програм

также я не могу понять что точно означает "!=", "==" значит что чтото равно какомуто значению.
а что значит "!="? Гугл не помог прояснить

Добавлено через 8 минут
переименовать форму не навредив скрипту можно или лучше не рисковать?
0
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
23.02.2016, 07:49 9
Лучший ответ Сообщение было отмечено Steroid как решение

Решение

Цитата Сообщение от Steroid Посмотреть сообщение
я пока не знаю про какие исключения ты говоришь и, зачем они нужны
Исключения (exceptions) это ошибки происходящие во время исполнения программы. Ты говорил что при нажатии кнопки Install происходит непонятная ошибка. Это оно и есть. Чтобы найти ошибку в коде нужно получить максимум информации о ней. Для этого поставь в начале метода button1_Click строку
C#
1
try {
а в самом конце
C#
1
2
3
4
catch (Exception ex)
{
    MessageBox.Show(ex.ToSring());
}
Затем запусти программу и сделай скриншот диалога с ошибкой.

Цитата Сообщение от Steroid Посмотреть сообщение
File.Exist я прописал, так как мне не понравился Thread.Sleep, потомучто не всегда точно можно прописать время ожидания, особенно если трафик интернета разный, расчитать трудно сколько поставить ожидание
Здесь нечего ожидать. Метод DownloadFile вернет управление только когда файл полностью скачан и значит он будет существовать.

Цитата Сообщение от Steroid Посмотреть сообщение
Также не хочется стартовать следующий процес раньше чем завершился предыдущий... незнал как лучше прописать, в принципе и досих пор не совсем понял чем Thread.Sleep лучше
WaitForExit, который ты уже использовал, позаботится об этом. Thread.Sleep служит всего лишь для организации паузы чтобы, в данном случае, не обрашаться слишком часто к диску.

Цитата Сообщение от Steroid Посмотреть сообщение
также я не могу понять что точно означает "!=", "==" значит что чтото равно какомуто значению. а что значит "!="? Гугл не помог прояснить
Это операторы "не равно" и "равно" соответственно.

Цитата Сообщение от Steroid Посмотреть сообщение
переименовать форму не навредив скрипту можно или лучше не рисковать?
Конечно можно. Для надежности используй команду меню Edit -> Refactoring -> Rename
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
23.03.2016, 23:25  [ТС] 10
OwenGlendower, большое спасибо за подробный ответ
долго не мог продолжить, был загружен другими делами...

try и catch - очень сильно помогло в поиске траблов
в выше приведеном примере кода указан пример "если чекбокс выделен то скачивай с линка"
Url = www.primer.ru - линк
FileName = "primer.exe", - имя для сохранения локально
Arguments = "/S" - ну и аргумент
все понятно

но если я хочу выполнить копирование с последуюшим запуском файла скажем из локальной сети/сервера, имеет ли смысл это записывать сюдаже или лучше записать это отдельно?

Пример:

new {
CheckBox = checkBox2,
File.Copy (@"\\server\tools\fail.exe", "C\Data\fail.exe");
Arguments = "/S"

или лучше это прописать после foreach отдельным образом if (checkbjx=checked) и т.д
я так понимаю что если записывать в последуюющий "foreach" то в коде нужно чтото дабавить!?
или пункт отмеченный ***** об этом тоже позаботится?

Кликните здесь для просмотра всего текста
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
foreach (var installer in installers) 
/*"installer" и "installers" это просто с потолка взятые "названия" или? 
(сильно путаюсь в таких местах, что взято с потолка а, 
что является оператором или командой)*/
    {
        if (!installer.CheckBox.Checked) continue;
        
        string installerPath = Path.Combine(installerRoot, installer.FileName); 
/*здесь "installerRoot" тоже с потолка взятое значение или файл будет 
устанавливаться по этому пути? 
(больше склоняюсь к первому, но лучше спрошу на всякий случай)*/
        using (var web = new WebClient())
        {
            web.DownloadFile(installer.Url, installerPath);
        }
        
        while (!File.Exists(installerPath))
        {
            Thread.Sleep(50);
        }
        
//*****
        using (var proc = Process.Start(installerPath, installer.Arguments))
        {
            proc.WaitForExit();
        }
    }
}
0
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
24.03.2016, 13:52 11
Цитата Сообщение от Steroid Посмотреть сообщение
но если я хочу выполнить копирование с последуюшим запуском файла скажем из локальной сети/сервера, имеет ли смысл это записывать сюдаже или лучше записать это отдельно?
Можно отдельно, но можно и совместить
Кликните здесь для просмотра всего текста
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
private void installButton_Click(object sender, EventArgs e)
{
    const string installerRoot = @"C:\Data";
    if (Directory.Exists(installerRoot))    
    {
        Directory.Delete(installerRoot, true);
    }
    Directory.CreateDirectory(installerRoot);
    
    var installers = new[] {
        new {
            CheckBox = checkBox1,
            Url = "https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7BA01E3D89-12EB-73E8-42E4-35DB1881DC3F%7D%26lang%3Dde%26browser%3D4%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe",
            SourceFileName = "",
            TargetFileName = "ChromeSetup.exe",
            Arguments = "/S"
        },
        new {
            CheckBox = checkBox2,
            Url = "https://download-installer.cdn.mozilla.net/pub/firefox/releases/42.0/win32/de/Firefox%20Setup%20Stub%2042.0.exe",
            SourceFileName = "",
            TargetFileName = "Mozilla.exe",
            Arguments = "/S"
        },
        new {
            CheckBox = checkBox3,
            Url = "",
            SourceFileName = @"\\server\tools\fail.exe",
            TargetFileName = "fail.exe",
            Arguments = ""
        },
        // и т.д.
    };
    
    foreach (var installer in installers)
    {
        if (!installer.CheckBox.Checked) continue;
        
        string targetPath = Path.Combine(installerRoot, installer.TargetFileName);
        if (installer.Url != "")
        {
            using (var web = new WebClient())
            {
                web.DownloadFile(installer.Url, targetPath);
            }
        }
        else if (installer.SourceFileName != "")
        {
            File.Copy(installer.SourceFileName, targetPath);
        }
        
        using (var proc = Process.Start(targetPath, installer.Arguments))
        {
            proc.WaitForExit();
        }
    }
}


Цитата Сообщение от Steroid Посмотреть сообщение
Пример:
new {
CheckBox = checkBox2,
File.Copy (@"\\server\tools\fail.exe", "C\Data\fail.exe");
Arguments = "/S"
В анонимных типах так писать нелья.

Цитата Сообщение от Steroid Посмотреть сообщение
/*"installer" и "installers" это просто с потолка взятые "названия" или? (сильно путаюсь в таких местах, что взято с потолка а, что является оператором или командой)*/
Это названия переменных. Они выбираются программистом и могут быть любыми. Ключевые слова языка выделяются отдельным цветом.

Цитата Сообщение от Steroid Посмотреть сообщение
C#
1
2
3
string installerPath = Path.Combine(installerRoot, installer.FileName);
/*здесь "installerRoot" тоже с потолка взятое значение или файл будет устанавливаться по этому пути?
(больше склоняюсь к первому, но лучше спрошу на всякий случай)*/
installerRoot это константа объявленная выше. Чтобы это понять нужно было всего лишь внимательно изучить код.
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
25.03.2016, 16:22  [ТС] 12
OwenGlendower,

Привет
Большое спасибо за твою помошь
У меня вопросов куча всяких
Полдня мучался с анонимными типами , как только чтото менял в коде все подчеркивалось красным
пока не допер почему он это делает

Добавлено через 2 часа 52 минуты
OwenGlendower,
блин незнаю что я поменял
теперь в место старта формы которой надо, открывается совершенно новая форма, хотя в этом отношении вообще ничего не менял
здесь нет функции "сохранить как..."?


Кликните здесь для просмотра всего текста
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
Program.cs
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Intro first = new Intro();
            DateTime end = DateTime.Now + TimeSpan.FromSeconds(5);
            first.Show();
            while (end > DateTime.Now)
            {
                Application.DoEvents();
            }
            first.Close();
            first.Dispose();
 
            int enableLua;
            using (RegistryKey readKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"))
            {
                enableLua = (int)readKey.GetValue("EnableLUA", 0);
            }
            if (enableLua == 0)
            {
                Application.Run(new Auswahlmenu());
            }
            else
            {
                Application.Run(new UAConoff());
            }
        }
/*------------------------------------------*/
UAConoff // Кнопка закрытия и перехода на другую форму (ту что с чекбоксами)
C#
1
2
3
4
5
6
private void button2_Click(object sender, EventArgs e)
        {
            Auswahlmenu checkboxform = new Auswahlmenu();
            checkboxform.ShowDialog();
            Close();
        }

0
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
25.03.2016, 18:17 13
Steroid, если ты не знаешь почему так происходит, то я тем более не могу знать. Чудес не бывает. Вспоминай что ты сделал.
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
28.03.2016, 00:03  [ТС] 14
OwenGlendower,
переписал весь код один к одному все работает (каждая запятая и даже пробел один к одному), так и не понял в чем ошибка была. ну да ладно...

в app.manifest прописано:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

есть другая проблемма:
при запуске ,
Кликните здесь для просмотра всего текста
C#
1
2
3
ProcessStartInfo key = new ProcessStartInfo();
key.FileName = @"c:\windows\system32\slui.exe";
Process.Start(key).WaitForExit();

выкидывает ошибку что файла не существует,
тупо пишу в *.bat C:\Windows\system32\slui.exe все работает нормально
записываю в код
Кликните здесь для просмотра всего текста
C#
1
2
3
4
ProcessStartInfo key = new ProcessStartInfo();
key.FileName = "cmd.exe";
key.Arguments = @"c:\windows\system32\slui.exe";
Process.Start(key).WaitForExit();

тоже ничего не работает, запускается только cmd.exe

в app.manifest уже прописано:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

нужно чтото особенно указать чтобы запустить файл из "C:\windows"?

Добавлено через 5 минут
ах да есть ли возможность сохранять проект как например файлы в word типа "Сохранить как..."?
0
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
28.03.2016, 00:54 15
Steroid, элемент requestedExecutionLevel указывает с какими правами запускать процесс, но это не влияет на запуск файлов т.к. права на чтение системного каталога у нас в любом случае есть, а права на запись здесь не нужны. Дело скорее в виртуализации файловой системы (File System Redirector) под x64 Windows. Переделай код запуска так:
C#
1
2
string sluiPath = Environment.ExpandEnvironmentVariables(Environment.Is64BitProcess ? @"%windir%\system32\slui.exe" : @"%windir%\sysnative\slui.exe");
Process.Start(sluiPath).WaitForExit();
Цитата Сообщение от Steroid Посмотреть сообщение
записываю в код
C#
1
2
3
4
ProcessStartInfo key = new ProcessStartInfo();
key.FileName = "cmd.exe";
key.Arguments = @"c:\windows\system32\slui.exe";
Process.Start(key).WaitForExit();
тоже ничего не работает, запускается только cmd.exe
Всё правильно. Для выполнения команды нужно указать ключ /c
C#
1
key.Arguments = @"/c c:\windows\system32\slui.exe";
Это правда не поможет запустить slui.exe и нужно тоже указывать путь используя каталог sysnative как в примере выше.

Цитата Сообщение от Steroid Посмотреть сообщение
ах да есть ли возможность сохранять проект как например файлы в word типа "Сохранить как..."?
Нет. Это можно сделать вручную. Однако это неправильный путь. Правильнее использовать систему контроля версий.
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
28.03.2016, 02:15  [ТС] 16
OwenGlendower,
Спасибо
0
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
04.04.2016, 11:41  [ТС] 17
OwenGlendower,
Приветствую тебя с новыми вопросами

Как запускать файлы прямо из Resources?

Показать прогресс скачивания и установки
0
Администратор
Эксперт .NET
17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,369
Записей в блоге: 1
04.04.2016, 12:36 18
Steroid,
 Комментарий модератора 

Согласно п5.16 правил форума в одной теме следует обсуждать один вопрос, поэтому новые вопросы я вынес в отдельные темы.
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
04.04.2016, 12:46  [ТС] 19
OwenGlendower,
спасибо
я тоже думал может новую тему создать но чтото не решился
темболее ты в курсе о чем речь
надеюсь не замучал вопросами
0
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
25.04.2016, 22:30  [ТС] 20
OwenGlendower,
Привет
C#
1
2
string sluiPath = Environment.ExpandEnvironmentVariables(Environment.Is64BitProcess ? @"%windir%\system32\slui.exe" : @"%windir%\sysnative\slui.exe");
Process.Start(sluiPath).WaitForExit();
это под дотНэт 3,5 реализовывается только через cmd или тоже както можно через "Environment"? (гуглил но толком ничего не нашел, либо код на "40сторок" либо через cmd)
потомучто если с чистой Windows7.iso устанавливать то нужно ставить дотНет 4.0 чтоб этот метод работал

ПыСы: а так скрипт готов инаходится в фазе "BETAtest"
как только буду уверен что работает без "реальных" косяков переведу на русский и выложу
0
25.04.2016, 22:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2016, 22:30
Помогаю со студенческими работами здесь

Защита приложения с помощью ключа
В общем мне нужна помошь. При первом запуске программа должна запрашивать ключ-запрос.Затем мой...

В зависимости от значения некоторого выражения вычислить значения функции y(x), определенной на отрезке [a;b],
Добрый вечер, помогите пожалуйста решить задачку С++ на тему&quot;Сочетания циклов и разветвлений&quot; В...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru