[英]Why is my Console app running from System32?
我的桌面上有一個控制台應用程序。 我將其設置為“計划任務”以無限期每20分鍾運行一次。 我已經關閉了自動睡眠/休眠模式。 然后我將PC保持開機狀態,並在周末(2-3天)鎖定了桌面。
我的控制台應用程序旨在在每次遇到異常時向我發送電子郵件。 當我返回時,檢查我的收件箱收到了幾封錯誤的電子郵件,其中包含
拒絕訪問路徑“ C:\\ WINDOWS \\ system32 \\ myLogs \\”。
看來我的控制台應用程序是從System32
運行的,而不是從Desktop
。
問:為什么表現如此?
這是我創建myLog
文件夾路徑時的字符串
var logpath = Directory.GetCurrentDirectory() + Properties.Settings.Default.LogPath;
這將檢查文件夾是否存在,如果不存在,則會創建一個新文件夾。
if (!Directory.Exists(logpath))
Directory.CreateDirectory(logpath);
我相信該錯誤是在檢查/創建文件夾時觸發的。 我的應用程序應在與控制台應用程序相同的目錄中創建myLog
文件夾。
問:為什么從System32
文件夾運行?
計划任務由任務計划程序服務啟動。 此服務在C:\\Windows\\System32\\svchost.exe
可執行文件中運行。 默認情況下,任務計划程序啟動的所有應用程序都以C:\\Windows\\System32
作為當前目錄啟動。
您可以在任務計划程序的“編輯操作”對話框中更改開始目錄:
您可以使用環境變量。 例如, %USERPROFILE%
將開始目錄設置為用戶的配置文件目錄(例如C:\\ Users \\ MyUsername)。
您可能要查找控制台應用程序可執行文件所在的目錄,而不是更改計划任務的開始目錄:
System.Reflection.Assembly.GetExecutingAssembly().Location
控制台應用程序是“命令行”,它們是從CMD.EXE運行的,該文件通常位於C:\\ Windows \\ System32 \\
我懷疑計划任務將當前目錄設置為CMD.EXE所在的位置,然后通過指定完整文件夾來啟動您的應用程序,
(請注意,對於64位計算機,32位命令行在\\ Syswow64 \\中存在)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.