为什么这个过程没有开始?

时间:2010-11-21 02:09:41

标签: vb.net process

我正在尝试启动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 个答案:

答案 0 :(得分:5)

根据您发布的代码,我不知道您在何处/如何获取instpathtype的值,或者声明它的类型。

但无论如何,你真的不应该这样做。 如果您希望代码“正常工作”,则文件系统的硬编码路径为very bad practice您上面发布的内容不仅会因操作系统的位数而中断,而且如果用户已重命名或移动了他们的Program Files文件夹。如果我的启动驱动器是E:,您的代码也将在我的计算机上失败。

相反,您应该使用特殊的系统文件夹。这样,您甚至无需检查您是在32位还是64位操作系统上运行。 .NET Framework提供了一种非常简单的方法,可以使用Environment.GetFolderPath method获取这些值,并指定要检索的文件夹的type

在这种情况下,您需要32位Program Files文件夹,无论主机操作系统的位数如何,因此您可以使用 ProgramFilesX86 值来检索相应的文件夹,如此:

Process.Start(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) & "\\Intel\\IntelAppStore\\bin\\Store.Client.UI.exe")

答案 1 :(得分:0)

当遇到这样的问题时,调试就会进入。尝试通过简单的My.Settings.instpathtype或类似方式显示MessageBox输出。如果您的测试机器是32位,并且输出与86不同,请更改它。

编辑:所以我猜你有64位机器?反过来尝试一下。交换IfElse下的语句,然后将My.Settings.instpathtype的输出置于条件下。

编辑:如果条件没有错误,则可能是因为\被读取为转义字符。您可以通过在其前添加另一个\来修复它。

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

答案 2 :(得分:0)

该过程可能正在启动,然后立即退出并出现错误。使用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")