process.start()的麻烦

时间:2014-06-30 07:06:32

标签: .net vb.net

我正在创建一个适用于域的程序。 Visual Basic(Visual Studio 2012)

在程序开始时,它会提示用户输入用户名和密码。我正在运行的一些事情需要以管理员身份运行。

我遇到以下问题。

Dim passwordRemote As SecureString = ConvertToSecureString(form1.PCMU.Text)
    Dim DomainRemote As String = "xxxxxxx"
    Dim UserNameRemote As String = "xxxxxx"
    Dim FileNameRemote As String = "cmrcviewer.exe" 
    Dim directoryRemote As String = "c:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386"

    process.StartInfo.WorkingDirectory = directoryRemote
    process.StartInfo.FileName = FileNameRemote 
    process.StartInfo.Domain = DomainRemote
    process.StartInfo.UserName = UserNameRemote
    process.StartInfo.Password = passwordRemote
    process.StartInfo.UseShellExecute = False

    process.Start()

我得到的问题是:

  

系统找不到指定的文件

我已将cmd.exe放入该目录并且可以正常工作。位于同一目录中的“cmrcviewer.exe”不起作用..

“cmrcviewer.exe”是与sccm2012相关的零件文件

请帮助我们将不胜感激

1 个答案:

答案 0 :(得分:0)

WorkingDirectory不是.exe所在的路径,而是将用作"当前"的路径。应用程序启动后的目录。默认情况下,它与.exe所在的文件夹位于同一文件夹中。

例如,当您打开项目文件夹的控制台窗口并执行msbuild之类的命令时,工作目录是您的项目文件夹,而可执行文件的路径始终位于.NET SDK中的某个位置。

您的代码仅使用可执行文件的相对路径名,这意味着Windows将尝试在您的应用程序的工作目录中找到它。如果它无法在那里找到它,它将在用户的路径环境变量中查找它。

要使代码正常工作,您需要写:

process.StartInfo.FileName = Path.Combine(directoryRemote,FileNameRemote)

或者只将整个路径作为单个字符串传递给FileName

相关问题