【发布时间】:2014-09-18 15:43:50
【问题描述】:
我正在尝试从我的 Vb.Net 应用程序运行批处理文件。 VS 2010 针对 .Net 4。
在 Windows XP 下运行良好。
在 Windows 8 下,我按预期得到了 UAC 提示符,我看到命令窗口短暂出现,但立即消失,批处理文件中的命令似乎都没有执行。
我尝试用单个pause 命令替换批处理文件,但窗口仍然会消失而无需等待输入。
这是我的代码:
processStartInfo = New System.Diagnostics.ProcessStartInfo()
processStartInfo.FileName = Script ' batch file name
If My.Computer.Info.OSVersion >= "6" Then ' Windows Vista or higher
' required to invoke UAC
processStartInfo.Verb = "runas"
End If
processStartInfo.Arguments = Join(Parameters, " ")
processStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal
processStartInfo.UseShellExecute = True
process = System.Diagnostics.Process.Start(processStartInfo)
【问题讨论】:
-
将“暂停”添加到 .bat 文件的末尾,以便您可以阅读错误消息。永远不要忘记检查 Process.ExitCode 以便诊断完全失败。
-
@Hans 正如我在问题中所说,我用一个暂停命令替换了整个批处理文件,但窗口立即消失了。我也许可以尝试查看 Process.ExitCode,但我假设正在显示命令窗口(尽管非常简短),该进程似乎已启动正常。我不希望我的代码等待该过程完成,尽管出于调试目的我也许可以暂时这样做。
-
如果您重命名 .bat 以使其找不到,
Process.Start应该抛出“找不到文件”异常。会这样吗? -
你的源代码sn-p对我们来说完全没用。批处理文件存储在哪里,在本地磁盘上还是在服务器上?批处理文件是否使用完整的路径和名称调用?是否使用了 UNC 路径或映射的网络驱动器路径?批处理或 .NET 应用程序的当前工作目录是什么?为什么我这么问?尝试使用 UNC 路径手动在服务器上运行具有当前工作目录的批处理文件,您会得到答案。
-
对不起,你说得对,我应该包含生成批处理文件名的代码。我不认为问题在于它没有找到文件。它与主 exe 和包含此代码的 dll 位于同一目录中。我正在使用我使用的完整路径:
My.Application.Info.DirectoryPath
标签: .net vb.net visual-studio-2010 batch-file