如何从Windows任务调度程序中调用可执行文件时获取可执行文件目录



我有一个内置于。exe中的控制台应用程序,和一个内置于。dll中的WriteLog模块。WriteLog模块在控制台应用程序项目中被引用。该模块正在使用Directory.GetCurrentDirectory()创建一个Log文件夹,并在可执行文件旁边的同一文件夹中写入. Log文件。在我的开发机器上调试时,以及在服务器上手动执行.exe时,这一切都像预期的那样工作。但是,当Windows任务调度程序调用可执行文件时,日志将被写入C:WindowsSysWOW64文件夹。似乎我的Directory.GetCurrentDirectory()返回父进程(taskenge .exe或taskmgr.exe)的路径,而不是正在运行的可执行文件的路径。我已经尝试了几种不同的方法来获取路径,如Environment.CurrentDirectory(),但没有成功。如何让我的程序在与可执行文件相同的文件夹中的所需位置创建日志文件?

注意:控制台应用程序和WriteLog模块都是用VB编写的。Net 4.7.2和服务器为Windows Server 2012 R2 Standard

搞定了。我不是很熟悉任务调度程序。与其说是系统管理员,不如说是程序员。我的解决办法是:在任务计划器中,打开任务的属性,转到"操作"选项卡,编辑"启动程序"操作,并设置可选的"开始"。值设置为包含可执行文件的文件夹的路径。我的日志现在写在我想要的地方。就在可执行文件旁边。(在源代码中仍然使用Directory.GetCurrentDirectory())

如何获取可执行文件目录

Imports System
Imports System.Runtime.InteropServices
Public Module AnythingYouWantToCallIt

Sub Main
Console.writeline(System.Windows.Forms.Application.StartupPath)
End Sub 
End Module

并将其放入批处理文件中以编译

"C:WindowsMicrosoft.NETFrameworkv4.0.30319vbc.exe" /target:exe /out:"%~dp0Tee.exe" "%~dp0Tee.vb"

用户选择当前目录而不是程序员,特别是在控制台程序中。

Windows上99.9%的函数不关心它是否是控制台。图形程序和控制台程序之间的唯一区别是,如果由图形程序启动,控制台程序将获得一个新的控制台。或者如果由控制台程序启动,则继承父控制台。没有什么可以阻止图形程序做同样的事情,但在程序员的指导下,而不是自动的。

没有什么可以阻止控制台程序创建窗口并像MS Word或记事本一样工作。

最新更新