Почему этот процесс не начинается? - PullRequest
0 голосов
/ 21 ноября 2010

Я пытаюсь запустить процесс Store.Client.UI.exe, который находится по адресу: «C: \ Program Files \ Intel \ IntelAppStore \ bin \ Store.Client.UI.exe» или «C: \». Программные файлы (x86) \ Intel \ IntelAppStore \ bin \ Store.Client.UI.exe "для 64-битных, как и я, поэтому я использую код:

    If My.Settings.instpathtype = 86 Then
        Process.Start("C:\Program Files\Intel\IntelAppStore\bin\Store.Client.UI.exe")
    Else
        Process.Start("C:\Program Files (x86)\Intel\IntelAppStore\bin\Store.Client.UI.exe")
    End If

Где my.settings.instpathtype указывает, является ли компьютер 64 или 32-разрядным. Но когда я запускаю его, по какой-то причине он не запускает Store.Client.UI.exe. Когда я захожу в Проводник и набираю «C: \ Program Files (x86) \ Intel \ IntelAppStore \ bin \ Store.Client.UI.exe», он запускает Store.Client.UI.exe. Что не так?

Ответы [ 3 ]

5 голосов
/ 21 ноября 2010

Из кода, который вы разместили, я не знаю, где / как вы получаете значение для instpathtype, или какой тип объявлен как.

Но независимо от того, что вы действительно не должны 'не делай так Жесткое кодирование путей к файловой системе - это очень плохая практика , если вы хотите, чтобы ваш код "Просто работал". То, что вы опубликовали выше, не только сломается в зависимости от разрядностиОС, но также, если пользователь переименовал или переместил свою папку Program Files.Если у меня загрузочный диск E :, ваш код также не будет работать на моем компьютере.

Вместо этого вам следует использовать специальные системные папки. Таким образом, вам даже не нужночтобы проверить, работаете ли вы в 32-битной или 64-битной операционной системе..NET Framework предоставляет действительно простой способ получения этих значений с помощью метода Environment.GetFolderPath и указания папки type , которую вы хотите получить.

В этом случае вам нужна папка 32-битных программных файлов, независимо от разрядности хост-системы, поэтому вы можете использовать значение ProgramFilesX86 для извлечения соответствующей папки, например:

Process.Start(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) & "\\Intel\\IntelAppStore\\bin\\Store.Client.UI.exe")
0 голосов
/ 22 ноября 2010

Возможно, процесс запускается, а затем немедленно завершается с ошибкой. Используйте процесс возврата из Process.Start и проверьте некоторые его свойства, такие как proc.exitcode, proc.starttime и proc.exittime.

dim proc as process
...
proc = Process.Start("C:\\Program Files\\Intel\\IntelAppStore\\bin\\Store.Client.UI.exe")
0 голосов
/ 21 ноября 2010

Когда вы сталкиваетесь с подобными проблемами, приходит отладка. Попробуйте отобразить, что выводит My.Settings.instpathtype, простым MessageBox или аналогичным. Если ваш тестовый компьютер 32-битный, и если выход отличается от 86, измените его.

РЕДАКТИРОВАТЬ : Итак, я думаю, у вас есть 64-битный компьютер? Попробуйте это наоборот. Поменяйте местами операторы в If и Else, затем поместите вывод My.Settings.instpathtype в условие.

РЕДАКТИРОВАТЬ : Если в условии нет ошибок, это может быть связано с тем, что \ читается как escape-символ. Вы можете исправить это, добавив еще один \ перед ним.

If My.Settings.instpathtype = 86 Then
    Process.Start("C:\\Program Files\\Intel\\IntelAppStore\\bin\\Store.Client.UI.exe")
Else
    Process.Start("C:\\Program Files (x86)\\Intel\\IntelAppStore\\bin\\Store.Client.UI.exe")
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...