일정한 시각 예를 들어 매일 09:00:00 AM 에 DB를 갱신하려고합니다.
이제껏 리용자가 특정시간에 어플리케이션을 실행시켰는데 이걸 저절로 하게 고쳐 달라네요.
콘솔로 넘기는건 문제가 아닌데 실행방법에 걸렸습니다.
여기 강좌와 질답란을 뒤지니 서비스로 등록하는 방법이 나와있던데 서비스등록할 필요까진 없을것 같구요.
델파이코드로 윈도우 스케쥴러에 등록하는 방법은 없는가요?
그냥 윈도우에 작업을 등록해서 사용하시면 될 듯 보이는데 굳이 델파이 코드로 등록을 해야할까요?
제어판에 "예약된 작업"이라고 있습니다.
실행해보시면 어떻게 설정하시는지는 아실꺼에요..^^
※ 계정설정하는 부분이 있는데 - 로그인한 계정과 그 계정 암호를 넣어야만 정상적으로 동작합니다.
만약 계정암호 없이 단일 계정으로 사용하고 계신다면 암호없이 설정하신 후에
고급속성을 열어서 [작업]탭에 "로그온된 경우에만 실행" 옵션을 체크하시면 됩니다. ^^
어차피 인스톨한 어플에서 등록을 하더라도
윈도우 스케줄러에 등록하려면 로그인 계정이 누구인지 알고 패스워드도 지정을 해줘야하는데
배포하고...자동으로 실행되는 기능이 바로 되도록하려면 윈도우 스케줄러가 아니라
그냥 어플에서 PC의 시간을 체크하는 기능을 주고 대기하다 시간되면 실행하도록 하는게 더 좋아보이네요
※ 윈도우 스케줄러를 콘솔화면에서 실행하는 방법은 http://blog.naver.com/nakanara/120036512816 이곳을 참조해보세요
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
NET_API_STATUS = DWORD;
type
LPBYTE = pointer;
type
TATInfo = record
JobTime: DWORD;
DaysOfMonth: DWORD;
DaysOfWeek: UCHAR;
Flags: UCHAR;
Command: LPWSTR
end;
const JOB_RUN_PERIODICALLY = $01; // set if EVERY
const JOB_EXEC_ERROR = $02; // set if error
const JOB_RUNS_TODAY = $04; // set if today
const JOB_ADD_CURRENT_DATE = $08; // set if to add current date
const JOB_NONINTERACTIVE = $10; // set for noninteractive
const JOB_INPUT_FLAGS = JOB_RUN_PERIODICALLY +
JOB_ADD_CURRENT_DATE +
JOB_NONINTERACTIVE;
const JOB_OUTPUT_FLAGS = JOB_RUN_PERIODICALLY +
JOB_EXEC_ERROR +
JOB_RUNS_TODAY +
JOB_NONINTERACTIVE;
function NetScheduleJobAdd(
Servername: LPCWSTR;
var
Buffer: TATInfo;
var
JobId: DWORD
): NET_API_STATUS; stdcall; external 'Netapi32.dll'
name 'NetScheduleJobAdd';
function NetScheduleJobDel(
Servername: LPCWSTR;
MinJobId: DWORD;
MaxJobId: DWORD
): NET_API_STATUS; stdcall; external 'Netapi32.dll'
name 'NetScheduleJobDel';
function NetScheduleJobEnum(
Servername: LPCWSTR;
var
PointerToBuffer: LPBYTE;
PrefferedMaximumLength: DWORD;
var
EntriesRead: LPDWORD;
var
TotalEntries: LPDWORD;
var
ResumeHandle: LPDWORD
): NET_API_STATUS; stdcall; external 'Netapi32.dll'
name 'NetScheduleJobEnum';
function NetScheduleJobGetInfo(
Servername: LPCWSTR;
JobId: DWORD;
var
PointerToBuffer: LPBYTE
): NET_API_STATUS; stdcall; external 'Netapi32.dll'
name 'NetScheduleJobGetInfo';
제어판에 "예약된 작업"이라고 있습니다.
실행해보시면 어떻게 설정하시는지는 아실꺼에요..^^
※ 계정설정하는 부분이 있는데 - 로그인한 계정과 그 계정 암호를 넣어야만 정상적으로 동작합니다.
만약 계정암호 없이 단일 계정으로 사용하고 계신다면 암호없이 설정하신 후에
고급속성을 열어서 [작업]탭에 "로그온된 경우에만 실행" 옵션을 체크하시면 됩니다. ^^