【问题标题】:Process.Start exception: "The directory name is invalid"Process.Start 异常:“目录名称无效”
【发布时间】:2014-03-17 14:12:51
【问题描述】:

我有一个 Process.Start 方法的实现在我的 Windows 7 Professional 64 位开发机器上失败,同时在我们的 Windows 2008 测试环境中工作。

const string CommandDirectory = @"C:\Program Files (x86)\Command";

var process = new Process
{
    StartInfo =
    {
        FileName = string.Format("{1}{0}MyExecutable.exe", Path.DirectorySeparatorChar, CommandDirectory),
        RedirectStandardError = true,
        RedirectStandardOutput = true,
        UseShellExecute = false,
        UserName = userName,
        Password = securePassword,
        Domain = "MYDOMAIN",
    },
};

process.Start();

process.Start();,我的开发机器上出现以下异常:

System.ComponentModel.Win32Exception occurred
  HResult=-2147467259
  Message=The directory name is invalid
  Source=System
  ErrorCode=-2147467259
  NativeErrorCode=267
  StackTrace:
       at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
       at System.Diagnostics.Process.Start()
  InnerException: 

我尝试了一些方法:

  1. 我已确保分配给进程的用户帐户对可执行文件所在的路径以及 %systemroot% 位置具有完全权限。我还确保用户在本地安全策略中具有“身份验证后模拟客户端”权限。

  2. 我已尝试将ProcessStartInfo.WorkingDirectory 显式设置为CommandDirectory。当我这样做时,可执行文件启动但立即崩溃,没有解释。

  3. 我通过删除UserNamePasswordDomain 属性在我的开发机器上创建了此功能,以便它使用我的个人凭据。但这对于部署是不切实际的。这让我觉得问题与凭据和权限有关。

谁能告诉我我做错了什么?

【问题讨论】:

  • 显示Windows 7的位数。
  • 谢谢。我编辑了问题以指定它是 64 位的。
  • 你试过用const string CommandDirectory = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFilesX86)
  • 被模拟的用户在机器上是否有主目录?
  • 有趣。模拟用户在开发机器上没有主目录。它在测试服务器上。

标签: c# process win32exception


【解决方案1】:

@Julien Lebosquain 的评论让我找到了答案。我需要以我想模拟的用户身份在本地登录一次。这创建了默认用户文件夹。

大概是我调用的可执行文件需要写入 AppData 或用户目录的另一个子文件夹。

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2014-03-07
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多