Windows应用--任务计划与系统服务


创建任务计划:

@echo off
schtasks /create /tn "Del-7_log" /ru system /tr D:\del-7.bat /sc weekly /d mon /st 01:00
pause

tn - 指定TaskName标识
ru - 指明运行用户,省略此参数则为当前用户
tr - 指明运行程序(或脚本)的路径
sc - 计划单位(频率)MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY,ONCE, ONSTART, ONLOGON,ONIDLE

在启动时运行(无需登录)

schtasks /create /tn "Del-7_log" /ru system /tr D:\startup.bat /sc ONSTART

删除任务计划

@echo off
schtasks /delete /tn "Del-7_log" /F
pause

每20分钟运行一次:(检查进程是否运行)

schtasks /create /sc minute /mo 20 /tn "MinuteTask" /tr D:\startup.bat

mo - 指定运行计划的频率,根据不同的频率取值范围不同:

MINUTE 1 ~ 1439 任务每 n 分钟运行一次。
HOURLY 1 ~ 23 任务每 n 小时运行一次。
DAILY 1 ~ 365 任务每 n 天运行一次。
WEEKLY 1 ~ 52 任务每 n 周运行一次。
MONTHLY 1 ~ 12 任务每 n 月运行一次。
MONTHLY LASTDAY任务在月份的最后一天运行。
MONTHLY FIRST、SECOND,...,LAST与 /d day 参数共同使用,并在特定的周和天运行任务。例如,在月份的第三个周三。

/d 指定周或月的一天。只与 WEEKLY 或 MONTHLY 计划共同使用时有效。
/m month[,month...] 指定一年中的某个月。有效值是 JAN ~ DEC 和 * (每个月)。只对于 MONTHLY 计划有效


查询程序是否运行 如果未启动则启动之

@echo off
@chcp 936
tasklist | find /i "waveviewer.exe" 
if %errorlevel% == 0 (
    echo [%date:~0,10% %time%] running >> D:\tools\waveview.log
)else ( 
    echo [%date:~0,10% %time%] start >> D:\tools\waveview.log
    start D:\tools\waveviewer_v4.1.0.01\waveviewer.exe
)

添加系统服务

sc create MultiLogs binpath=D:\tools\MultiLogs.exe

其他选项:选项和值之间需要1个空格
start= <boot|system|auto|demand|disabled|delayed-auto>
DisplayName= <显示名称>

启动系统服务

sc start MultiLogs

停止系统服务

sc stop MultiLogs

删除系统服务

sc delete MultiLogs

通过显示名称查询服务名称 有空格时需要加引号

sc getKeyName "wave view service"

通过服务名称查询显示名称

sc getDisplayName waveviewerSrv

- 阅读全文 -

QT5开发笔记--托盘图标


#include <QSystemTrayIcon>

// 设置托盘图标(重要)
QIcon icon(":/wave.ico");
systemTray = new QSystemTrayIcon(this);
systemTray->setIcon(icon);
systemTray->setToolTip("托盘测试"); /// 提示信息

/// 连接信号
connect(systemTray,
        SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
        this,
        SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason)));

systemTray->show();    /// 显示托盘图标

激活信号的执行槽函数:

void MainWindow::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
{
    switch(reason){
    case QSystemTrayIcon::Trigger:
        /// 单击托盘图标: 隐藏显示主程序窗口
        this->hide();
        break;
    case QSystemTrayIcon::DoubleClick:
        /// 双击托盘图标: 双击后显示主程序窗口
        this->showNormal();    /// 还原显示(show保持原来的尺寸)
        break;
    case QSystemTrayIcon::Context:
        /// 右键菜单(上下文) 
        /// qApp->exit();
        break;
    default:
        break;
    }
}

最小化时隐藏窗口:

void MainWindow::changeEvent(QEvent* event)
{
    Q_UNUSED(event);
    if(this->windowState()==Qt::WindowMinimized)
    {
        hide();
    }
}

- 阅读全文 -

git管理同步svn仓库


1.先检出svn版本库(通过-r参数只检出最新版本的)

git svn clone -r100 URL

2.设置git版本仓库

 git remote add oroct https://e.coding.net/oroct/test.git

3.更新git代码

git fetch --all
git reset --hard oroct/master

4.添加开发分支dev,并在此基础上开发


5.开发完成后将dev分支,合并成为一个提交

git reset --soft HEAD^
git commit --amend

6.切换回git-svn分支,并拉取最新代码

git switch master 
git reset --hard git-svn   

7.合并dev分支到master

git cherry-pick dev

8.推送版本库存

git svn dcommit

- 阅读全文 -

Linux应用程序--构建初始化函数列表


示例代码:

#include <unistd.h>
#include <stdint.h>
#include <stdio.h>

/// 定义导出宏定义
#define SECTION_INIT __attribute__((unused, section(".init_task")))
#define EXPORT_INIT(func) init_func _fn_##func SECTION_INIT = func

typedef void (*init_func)(void);

/// 这两个函数不用实现,只要不调用就不会出错
extern init_func init_start;
extern init_func init_end;

static void mspec1(void)
{
  printf("HelloWorld!\r\n");
}
EXPORT_INIT(mspec1);

static void mspec2(void)
{
  printf("aloha!\r\n");
}
EXPORT_INIT(mspec2);

static void mspec3(void)
{
  printf("hello!\r\n");
}
EXPORT_INIT(mspec3);
///--------------------------------------
void init_calls(void)
{
  init_func *call_ptr = (init_func *)&init_start;
  do
  {
    fprintf(stderr, "call_ptr: %p\n",call_ptr);
    (*call_ptr)();
    ++call_ptr;
  } while (call_ptr < (init_func *)&init_end);
}
///--------------------------------------
int main(int argc, char *argv[])
{
  init_calls();
  return 0;
}

导出默认的lds脚本文件:

$ ld --verbose > b.lds

修改lds文件,之前添加以下代码

  /* 在__bss_start之前添加 */
  init_start = .;
  .init_task : { *(.init_task) }
  init_end = .;
  code_segment : { *(code_segment) }

  /*.........*/
  __bss_start = .;

编译命令: -T b.lds

$gcc $^ ${CFLAGS} -Tb.lds -o $@ 

- 阅读全文 -


Copyright©2024 春天花会开, All Rights Reserved. Email: webmaster@oroct.com