Jump to content
  • Совершенно свободно и бесплатно, Вы можете создавать свои Статьи, на различную тематику, делится опытом и знаниями с другими участниками и посетителями Типичного социума!
    Выделяйте свои Статьи, тегами и префиксами.
  • Удалить файл по крону на сервере в заданное время, когда сервер выключен, используя C++ или Python

    Удалить файл по крону на сервере в заданное время, когда сервер выключен, используя C++ или Python

     Share


    Удаление файла на сервере в заданное время, когда сервер выключен, требует установки задачи на удаление файла на сервере до его выключения. Это может быть достигнуто с помощью использования операционной системы для установки задачи планировщика на удаление файла в заданное время. Вот пример кода на C++, который позволяет установить задачу планировщика на удаление файла в заданное время:

    #include <iostream>
    #include <windows.h>
    #include <taskschd.h>
    #pragma comment(lib, "taskschd.lib")
    #pragma comment(lib, "comsupp.lib")
    
    using namespace std;
    
    int main()
    {
        // Определить время, когда нужно удалить файл (в данном примере - 21 марта 2023 года, 9:00 утра)
        SYSTEMTIME st = { 2023, 3, 0, 21, 9, 0, 0, 0 };
        FILETIME ft;
        SystemTimeToFileTime(&st, &ft);
    
        // Получить указатель на планировщик задач
        ITaskService* pService = nullptr;
        CoInitialize(nullptr);
        HRESULT hr = CoCreateInstance(CLSID_TaskScheduler, nullptr, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService);
    
        if (FAILED(hr))
        {
            cout << "Ошибка создания экземпляра планировщика задач: " << hr << endl;
            return 1;
        }
    
        // Войти в планировщик задач с помощью учетных данных администратора
        hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
    
        if (FAILED(hr))
        {
            cout << "Не удалось подключиться к планировщику задач: " << hr << endl;
            pService->Release();
            CoUninitialize();
            return 1;
        }
    
        // Создать экземпляр планировщика задач
        ITaskFolder* pRootFolder = nullptr;
        hr = pService->GetFolder(_bstr_t("\\"), &pRootFolder);
    
        if (FAILED(hr))
        {
            cout << "Ошибка получения корневого каталога планировщика задач: " << hr << endl;
            pService->Release();
            CoUninitialize();
            return 1;
        }
    
        // Создать новую задачу планировщика
        ITaskDefinition* pTask = nullptr;
        hr = pService->NewTask(0, &pTask);
    
        if (FAILED(hr))
        {
            cout << "Ошибка создания новой задачи планировщика задач: " << hr << endl;
            pRootFolder->Release();
            pService->Release();
            CoUninitialize();
            return 1;
        }
    
        // Установить параметры задачи планировщика
        pTask->put_Principal(_bstr_t(L""));
        IActionCollection* pActionCollection = nullptr;
        hr = pTask->get_Actions(&pActionCollection);
    
        if (FAILED(hr))
        {
            cout << "Ошибка получения коллекции действий задачи плани

     

     

    В Python можно использовать модуль win32com.client, чтобы работать с планировщиком задач Windows. Вот пример кода на Python, который устанавливает задачу планировщика на удаление файла в заданное время:

    import win32com.client
    import pythoncom
    
    def delete_file_task():
        # Определить время, когда нужно удалить файл (в данном примере - 21 марта 2023 года, 9:00 утра)
        delete_time = "2023-03-21T09:00:00"
    
        # Получить указатель на планировщик задач
        scheduler = win32com.client.Dispatch("Schedule.Service")
        scheduler.Connect()
    
        # Создать экземпляр планировщика задач
        root_folder = scheduler.GetFolder("\\")
    
        # Создать новую задачу планировщика
        task = scheduler.NewTask(0)
    
        # Установить параметры задачи планировщика
        task.RegistrationInfo.Description = "Удаление файла"
        task.Settings.Enabled = True
        task.Settings.AllowDemandStart = True
        task.Settings.StopIfGoingOnBatteries = False
        task.Settings.DisallowStartIfOnBatteries = False
        task.Settings.StartWhenAvailable = True
    
        # Установить действие для задачи планировщика
        action = task.Actions.Create(win32com.client.constants.task_action_exec)
        action.ID = "DeleteFileAction"
        action.Path = "cmd.exe"
        action.Arguments = "/c del C:\\path\\to\\file.txt"
        action.WorkingDirectory = "C:\\path\\to"
    
        # Установить триггер для задачи планировщика
        trigger = task.Triggers.Create(win32com.client.constants.task_trigger_time)
        trigger.StartBoundary = delete_time
    
        # Зарегистрировать задачу планировщика
        root_folder.RegisterTaskDefinition("DeleteFileTask", task)
    
    if __name__ == "__main__":
        pythoncom.CoInitialize()
        delete_file_task()
        pythoncom.CoUninitialize()

    Обратите внимание, что для работы с модулем win32com.client необходимо установить пакет pywin32.


    AndrewPro
     Share


    User Feedback

    Recommended Comments

    There are no comments to display.



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Privacy Policy

Write what you are looking for and press enter or click the search icon to begin your search

-->