我正在尝试启动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。怎么了?
答案 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位机器?反过来尝试一下。交换If
和Else
下的语句,然后将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")