我在 dot net 中创建了一个简单的 Windows 服务,用于运行一个文件。当我在本地运行该服务时,我可以看到文件在任务管理器中正常运行。但是,当我在服务器上运行该服务时,它不会运行该文件。我检查了该文件的路径,没有问题。我还检查了文件夹和文件的权限,它们也没有问题。而且没有发生任何异常。下面是用于启动运行该文件的进程的代码。我首先在 stack overflow 上发布了此内容,有些人认为这是一个配置问题,所以我将其移到这里。有什么想法吗?
try
{
// TODO: Add code here to start your service.
eventLog1.WriteEntry("VirtualCameraService started");
// Create An instance of the Process class responsible for starting the newly process.
System.Diagnostics.Process process1 = new System.Diagnostics.Process();
// Set the directory where the file resides
process1.StartInfo.WorkingDirectory = "C:\\VirtualCameraServiceSetup\\";
// Set the filename name of the file to be opened
process1.StartInfo.FileName = "VirtualCameraServiceProject.avc";
// Start the process
process1.Start();
}
catch (Exception ex)
{
eventLog1.WriteEntry("VirtualCameraService exception - " + ex.InnerException);
}
答案1
好的,问题在于该文件未与服务器上的程序关联。因此,我需要打开程序来运行该文件,而不是尝试打开该文件,然后将该文件作为参数传递给程序。以下是语法。
// Set the directory where the file resides
process1.StartInfo.WorkingDirectory = "C:\\Program Files (x86)\\Axis Communications\\AXIS Virtual Camera 3\\";
// Set the filename name of the file to be opened
//process1.StartInfo.FileName = "VirtualCamera.exe C:\\VirtualCameraServiceSetup\\VirtualCameraServiceProject.avc";
process1.StartInfo.FileName = "VirtualCamera.exe";
process1.StartInfo.Arguments = "VirtualCameraServiceProject.avc";
答案2
尝试用 替换"C:\Path to File.avc"
,"C:\Path to Program that opens AVC files\ProgramName.exe" "C:\Path to File.AVC"
看看是否有任何变化。我以前见过这种情况,有人通过双击文件打开某种类型的文件,交互工作正常(考虑到文件关联),但当作为批处理作业、服务或类似程序调用时,它需要将实际的 exe 名称与文件名作为参数传递。
另外,请仔细检查您的服务是否被允许与桌面交互,因为这可能是必需的(尽管根据您的 Windows 服务器版本,此选项可能不存在,因为它已在较新版本中被删除)。