Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#找不到指定的文件_C#_.net_Cmd_Process.start - Fatal编程技术网

C#找不到指定的文件

C#找不到指定的文件,c#,.net,cmd,process.start,C#,.net,Cmd,Process.start,嗨,我正在尝试创建一个应用程序,它使用msg.exe通过网络发送消息 当我从cmd执行msg时,一切正常,但当我以无法执行的形式打开cmd时,使用cmd转到system32文件夹,文件没有显示在那里,但当我浏览或使用cmd时,它正常工作,并且所有东西都工作 在另一台计算机上进行了测试,该应用程序运行良好,在此1上运行64位win 7 下面是我用来打开cmd的代码示例: Process.Start("cmd"); 我是以管理员的身份运行的,我也尝试过直接从msg.exe执行它,在所有32位系统的

嗨,我正在尝试创建一个应用程序,它使用msg.exe通过网络发送消息

当我从cmd执行msg时,一切正常,但当我以无法执行的形式打开cmd时,使用cmd转到system32文件夹,文件没有显示在那里,但当我浏览或使用cmd时,它正常工作,并且所有东西都工作

在另一台计算机上进行了测试,该应用程序运行良好,在此1上运行64位win 7

下面是我用来打开cmd的代码示例:

Process.Start("cmd");
我是以管理员的身份运行的,我也尝试过直接从msg.exe执行它,在所有32位系统的64位上都有问题,但在任何64位上都没有问题


编辑:确定运行64位32位应用程序时发现问题无法运行system 32文件夹中的64位应用程序。尝试访问此文件夹时,它会将您重定向到%WinDir%\SysWOW64。解决方法是在某些Windows版本(如Home、not Professional/Business等)上使用此路径C:\Windows\Sysnative\file(%WinDir%\Sysnative)

msg.exe不包括在内。

您需要使用cmd吗?为什么不使用Process.Start直接调用msg.exe。如果您知道它在哪里,您应该能够运行它。

如果您在应用程序中,您最好直接执行“msg”


您可能需要为进程的StartInfo设置“用户名”和“密码”。(“msg.exe”位于系统文件夹中,运行代码的用户没有相应的权限从该文件夹运行。)

问题中提到的解决方案是我的窍门是什么-在此处为后代发布可测试的解决方案:

public class Messenger : IMessenger
{
    private readonly IProcessWrapper _process;

    public Messenger(IProcessWrapper process)
    {
        _process = process;
    }

    public void SendMessage(string message)
    {
        var info = new ProcessStartInfo
            {
                WorkingDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "sysnative"),
                FileName = "msg.exe",
                Arguments = string.Format(@" * ""{0}""", message),
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = true,
                Verb = "runas"
            };
        _process.Start(info);
    }
}


public interface IProcessWrapper : IDisposable
{
    IEnumerable<Process> GetProcesses();
    void Start(ProcessStartInfo info);
    void Kill();

    bool HasExited { get; }
    int ExitCode { get; }
}
公共类信使:IMessenger
{
私有只读IProcessWrapper\u进程;
公共信使(IProcessWrapper进程)
{
_过程=过程;
}
公共无效发送消息(字符串消息)
{
var info=新流程StartInfo
{
WorkingDirectory=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),“sysnative”),
FileName=“msg.exe”,
参数=string.Format(@“*”{0}“”,消息),
WindowsStyle=ProcessWindowsStyle.Hidden,
UseShellExecute=true,
动词=“符文”
};
_进程启动(信息);
}
}
公共接口IProcessWrapper:IDisposable
{
IEnumerable getProcesss();
无效启动(ProcessStartInfo信息);
无效杀死();
布尔已退出{get;}
int ExitCode{get;}
}

也许您应该检查要构建的“目标平台”。
在我的64位win7电脑上,我应该选择“x64”或“任意CPU”,让我的代码找到“msg.exe”。

添加一些代码,让您的问题更清楚一点。您的问题是什么?当您尝试直接从命令提示符执行
msg.exe
时,您是否以管理员身份登录?是的,我以管理员身份运行,尝试使用msg.exe直接使用进程。开始(“msg.exe”,“/C msg/server:xxx xxx message”);给我错误系统找不到指定的文件给我一个错误windows找不到msg.exe,这有点奇怪我也直接把代码放进去了,但它似乎找不到文件,所以我用cmd检查了目录,它没有列出它。如果我正常使用cmd或浏览文件夹,文件就在那里。甚至尝试创建一个快捷方式,并执行该快捷方式时表示该快捷方式未链接到任何内容。尝试后表示它找不到文件。据我所知,这似乎是一个win 64位问题,它在所有32位上都有效,但在64位上无效。抱歉,我对编码还是有点陌生,我需要更改该代码部分中的任何值吗?,toServer和toUser说它在当前环境中不存在,你需要设置东西(任何在VS中显示为红色的东西)!(也可能需要设置p.StartInfo.UserName | p.StartInfo.Password)你能给我举个例子吗P
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "msg.exe";
startInfo.Arguments = "/SERVER hellowword";
startInfo.WorkingDirectory = @"C:\Temp";
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
startInfo.ErrorDialog = true;
Process process = Process.Start(startInfo);
Process p = new Process();
System.Diagnostics.ProcessStartInfo sinfo = new System.Diagnostics.ProcessStartInfo("C:\\Windows\\System32\\msg.exe");
p.StartInfo.Arguments=String.Format("/server:{0} {1} {2}",toServer,string.Compare(toUser.Trim(), "") == 0 ? "*" : toUser,message);
p.StartInfo = sinfo;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = "msg.exe";
p.Start();
public class Messenger : IMessenger
{
    private readonly IProcessWrapper _process;

    public Messenger(IProcessWrapper process)
    {
        _process = process;
    }

    public void SendMessage(string message)
    {
        var info = new ProcessStartInfo
            {
                WorkingDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "sysnative"),
                FileName = "msg.exe",
                Arguments = string.Format(@" * ""{0}""", message),
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = true,
                Verb = "runas"
            };
        _process.Start(info);
    }
}


public interface IProcessWrapper : IDisposable
{
    IEnumerable<Process> GetProcesses();
    void Start(ProcessStartInfo info);
    void Kill();

    bool HasExited { get; }
    int ExitCode { get; }
}