【问题标题】:Running script in selected path在选定路径中运行脚本
【发布时间】:2011-08-22 10:36:53
【问题描述】:

我目前有这段代码:

   Sub Button1Click(sender As Object, e As EventArgs)



            If dlgFolder.ShowDialog = Windows.Forms.DialogResult.OK Then

                txtPath.Text = dlgFolder.SelectedPath


                Try

                    Dim CopyFile As String = Path.Combine(Directory.GetCurrentDirectory, "pdftk.exe")
                    Dim CopyLocation As String = Path.Combine(dlgFolder.SelectedPath, "pdftk.exe")
                    Dim pyScript As String = Path.Combine(Directory.GetCurrentDirectory, "pdfmerge.py")
                    Dim pyLocation As String = Path.Combine(dlgFolder.SelectedPath, "pdfmerge.py")

                    System.IO.File.Copy(CopyFile, CopyLocation, True)
                    System.IO.File.Copy(pyScript, pyLocation, True)

                Catch copyError As IOException
                Console.WriteLine(copyError.Message)
                End Try         
            End If
End Sub

这会将当前工作目录(将是默认安装文件夹)中的两个文件复制到从 Fodler 对话浏览器中选择的路径。这可以正常工作。

现在我想做的就是将“pdfmerge.py”运行到选定的文件夹路径中。我尝试了以下代码,但脚本仍在当前工作目录中运行。

Sub BtnNowClick(sender As Object, e As EventArgs)

        Dim myProcess As Process
        Dim processFile As String = Path.Combine(dlgFolder.SelectedPath, "pdfmerge.py")

        myProcess.Start(processFile, dlgFolder.SelectedPath)



    End Sub

【问题讨论】:

  • 如果你在Debug.Print dlgFolder.SelectedPath BtnNowClick 中得到什么?另外,您确定Try 块在Button1Click 中完成吗?
  • @jonsca 是的,try 块运行良好。问题是命令行参数。我想从 dlgFolder.SelectedPath 运行 pdfmerge.py 而不是当前工作目录
  • 我明白你现在在说什么,进程开始了,尽管文件的完整路径正在本地调用它。嗯......必须有一种方法可以解决这个问题,但我可以看到系统是如何设置的。对不起,我之前误解了。
  • 我认为这就是您所需要的,请查看 MSDN 页面以细化所需的参数(但 03-04 的旧消息来源说您需要做的就是将工作目录作为第三个传递论点,见this)。

标签: vb.net process cmd directory


【解决方案1】:

您可以设置进程的工作目录。

Dim p As New ProcessStartInfo
p.FileName = Path.Combine(dlgFolder.SelectedPath, "pdfmerge.py")
p.WorkingDirectory = dlgFolder.SelectedPath
Process.Start(p)

一个问题:您确保dlgFolder.SelectedPath 是正确的吗?在不了解程序内部工作原理的情况下,似乎可以在Button1 之前按BtnNow,这意味着dlgFolder.SelectedPath 不会由用户设置。

【讨论】:

  • 我做了Directory.SetCurrentDirectory(dlgFolder.SelectedPath),这似乎解决了问题。
【解决方案2】:

尝试使用带有 5 个参数的 Process.Start() 的重载。

Start ( _
fileName As String, _
arguments As String, _
userName As String, _
password As SecureString, _
domain As String _
)

您可以将null 传递给userNamepassword,但如果您的目录超出了您有权访问的标准目录,则可能需要输入您的用户名和密码。@我认为 987654326@ 将是工作目录。

【讨论】:

  • 我不太明白这一点。应该发明用户名、密码和域?一旦你创建了函数,我如何使用它来调用 dlgFolder.selectedPath 中的“pdfmerge.py”?
  • 这只是 MSDN 中 Process.Start 函数的签名。由于您将在 Documents 等之外的目录中启动进程,因此您的帐户通常可以访问,我认为您需要用户名+密码(您登录 Windows 时使用的密码)作为凭据。根据Start 的描述,我认为domain 是该过程开始的目录。但是,我认为Hand-E-Food 可能在这方面有所作为。您将像以前一样将传递给 Start 的参数传递给您。
  • 所以,我想应该是Process.Start(processFile,"pdfmerge.py","YourUsername","your Windows password",dlgFolder.selectedPath)
  • 所以基本上这会使程序只能由一个用户使用?难道没有更好的方法吗?
  • 我不知道你会怎么处理。尝试制作一个玩具程序来测试,看看这些参数是否都是正确的。
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 2019-04-18
  • 2021-12-28
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多