Q&A

  • 윈도우 스케쥴러에 등록하려면 어떻게 해야하나요?
일정한 시각 예를 들어 매일 09:00:00 AM 에 DB를 갱신하려고합니다.
이제껏 리용자가 특정시간에 어플리케이션을 실행시켰는데 이걸 저절로 하게 고쳐 달라네요.
콘솔로 넘기는건 문제가 아닌데 실행방법에 걸렸습니다.
여기 강좌와 질답란을 뒤지니 서비스로 등록하는 방법이 나와있던데 서비스등록할 필요까진 없을것 같구요.
델파이코드로 윈도우 스케쥴러에 등록하는 방법은 없는가요?
9  COMMENTS
  • Profile
    김병윤 2008.05.25 01:16
    그냥 윈도우에 작업을 등록해서 사용하시면 될 듯 보이는데 굳이 델파이 코드로 등록을 해야할까요?
    제어판에 "예약된 작업"이라고 있습니다.
    실행해보시면 어떻게 설정하시는지는 아실꺼에요..^^
    ※ 계정설정하는 부분이 있는데 - 로그인한 계정과 그 계정 암호를 넣어야만 정상적으로 동작합니다.
    만약 계정암호 없이 단일 계정으로 사용하고 계신다면 암호없이 설정하신 후에
    고급속성을 열어서 [작업]탭에 "로그온된 경우에만 실행" 옵션을 체크하시면 됩니다. ^^
  • Profile
    steps 2008.05.25 01:28
    앞으로의 배포문제를 념두에 두고 저에게 준 과제입니다.
    사용자보고 인스탈후에 제어판의 scheduled task에 가서 인스탈된 어플을 찾은 다음 시간과 파스워드를 등록하라고 할수 없잖어요.
    혹시 없는 기능을 찾느라 공연히 시간을 보내지 않는지 모르겠습니다.
  • Profile
    김병윤 2008.05.25 02:08
    어차피 인스톨한 어플에서 등록을 하더라도
    윈도우 스케줄러에 등록하려면 로그인 계정이 누구인지 알고 패스워드도 지정을 해줘야하는데
    배포하고...자동으로 실행되는 기능이 바로 되도록하려면 윈도우 스케줄러가 아니라
    그냥 어플에서 PC의 시간을 체크하는 기능을 주고 대기하다 시간되면 실행하도록 하는게 더 좋아보이네요
    ※ 윈도우 스케줄러를 콘솔화면에서 실행하는 방법은
    http://blog.naver.com/nakanara/120036512816 이곳을 참조해보세요
  • Profile
    steps 2008.05.25 03:46
    당장은 가르쳐주신대로 콘솔호출방식을 리용하렵니다.
    http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=47254&lngWId=1에서 VB로 된 스케쥴제어소스(API리용)도 얻었는데 델파이로 넘겨 제대로 돌아가면 올려놓으렵니다.
    좋은 주말 되세요.
  • Profile
    이정욱 2008.05.25 09:09
    배포하시기에 더 좋은 방법은 그 어플리케이션을 서비스 형태로 만드셔서 특정시간에 쿼리를 수행하게 하면 됩니다.

    그런데 만약 Ms-SQL을 사용하시고, 그 예약 쿼리가 스토어드 프로시져로 만들수 있다면, MS-SQL 자체 스케쥴러에서 동작되게 할수도 있습니다.

    물론.. 이 스케쥴러에 등록을 하기 위해선.. 또 다른 공부가 필요하게 되겠죠.. 하지만 윈도우 스케쥴러보다 낫습니다.

    만약 둘 다 공부해야 하는 입장이라면, MS-SQL 자체 스케쥴러에 등록되게 하는 것을 권해 드립니다.
  • Profile
    구창민 2008.05.26 06:36
    안녕하세요..아래 내용을 참고 하세요...


    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls;

    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';



    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    at: TATInfo;
    Flag: DWORD;
    ComName: WideString;
    begin
    at.JobTime := (14 * 3600 + 52 * 60) * 1000;
    at.DaysOfMonth := 0;
    at.DaysOfWeek := 0;
    at.Flags := JOB_RUN_PERIODICALLY;
    at.Command := 'calc.exe';
    NetScheduleJobAdd(PWideChar(ComName), at, Flag);
    end;


    end.
  • Profile
    steps 2008.05.27 00:34
    이종욱님 구창민님 정말 감사합니다.
    귀한 시간 내시여 래핑까지 해주신 창민님께 다시 한번 인사드립니다.
  • Profile
    이정욱 2008.05.27 02:48
    흑.. 이종욱이 아니라.. 이정욱이에요.ㅜㅜ
  • Profile
    steps 2008.05.27 02:58
    어처구니없는 질문으로 페를 끼치다못해 언감생심 귀하신 성함까지 감히...
    이정욱님 정말 죄송합니다. 노염푸시고 한델에 매달려 사는 불쌍한 중생 앞으로도 많이 도와주세요.
    • 유경민
    • 2008.05.29 07:06
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.05.29 13:53
      http://www.codegear.com/downloads/regusers/delphi http://download.borlandforum.com/delphi/Delph...
    • 구창민
      2008.05.29 20:22
      이곳 자료실에 가셔서 'delphi 6' 으로 검색해보시면 두개의 업뎃팩을 보실 수 있을겁니다. 즐거운 프...
    • 유경민
      2008.06.03 06:56
      감사합니다~
    • 홍성락
      2008.05.29 04:56
      delmadang에 [민성기]님이 올리신 소스가 있어요. 질문과 답변 {[추가] 프린터 추가 마법사~ ^^} 제목입...
    • 공성환
      2008.05.29 00:55
      FormatFloat 함수를 이용하셔도 될것같은데요... ShowMessage(FormatFloat('#,##0.0',7.0));
    • 강태원
      2008.05.29 02:31
      앗.... 그런 함수도 있군요!! 잘 동작 하네요. 알려주셔서 감사합니다.^^
    • 석주현
      2008.05.29 13:59
      전 주로 그냥 format 함수를 사용합니다. format('%2.1f',[7.0]); 보통 C 에서 쓰는 printf 와 비...
    • 강태원
      2008.06.10 02:52
      소나기님이 알려주신 방법도 좋을듯 하네요. 진작 알았으면 사용해 보는건데... 다음 프로젝트때 ...
    • 루루
    • 2008.05.28 04:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 루루
      2008.05.29 04:36
      답답해서 progdigy.com 을 뒤져 봤더니 비슷한 어려움을 겪은 케이스가 있었네요만, 그 해결책에 대한 답...
    • 루루
      2008.06.04 04:36
      ATi 라데온의 듀얼모니터 Threater 기능때문에 DSPACK234의 일부기능이 오작동 하는 것 같습니다. 지포...
    • 홍성락
    • 2008.05.29 00:59
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 화이팅
    • 2008.05.28 00:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2008.05.28 01:40
      안녕하세요.. MDI 프로젝트에 대한 개념을 잡는 것이 먼저인것 같습니다.. 아래 내용을 숙독하시면...
    • steps
      2008.05.28 08:11
      제가 잘못 리해하지않았는지. 혹 string이나 widestring을 utf8로 남기는게 목적이라면 델파이의 UTF8Enc...
    • 이정욱
      2008.05.27 13:55
      아마 컴포넌트가 제데로 설치 되지 않은것 같습니다. 설치 방법이 있는 텍스트 파일을 잘 읽어보시고 ...
    • 석주현
      2008.05.27 15:51
      정확한 에러 메세지를 알려 주셔야 말씀을 드릴 수 있을 것 같습니다. 일단 이정욱님 말씀처럼 컴포넌...
    • steps
      2008.05.27 19:56
      저는 제오스6.61베타를 쓰는데요. 일단 packages 폴더안에서 component.dpk를 찾아 컴파일하고 그 다음...
    • 이정욱
      2008.05.27 13:56
      마이빌더가.. 뭔가요? ^^; 어디서 볼수 있는것인지.. 또 어떤프로그램인지 알아야 도움을 드릴 수 있을 ...
    • 가을바람
      2008.05.27 18:26
      덕분에 마이빌더가 뭔지알겠되었네요.. 좋아보이네요.. "마이빌더"로 검색해보시길.. 개발사홈피보면 델...
    • 이정욱
      2008.05.27 13:59
      코드로는 알려드리기가 힘들지만... XML 은 기본적으로 델파이에서 파싱이 가능합니다. XML을 읽어서....
    • 최용일
      2008.05.27 00:44
      uses절에 windows유닛을 추가하세요. CreateMutex함수는 windows유닛에 있습니다.
    • dbwrite
      2008.05.30 05:33
      예전에 CreateMutex를 이용하여 처리 하다 중복으로 실행 (프로그램을 잘못짜서그런지 )되는경우가 있어 ...
    • 최용일
      2008.05.26 20:03
      xFrame, yFrame 변수가 nil인지 체크해보세요...
    • 미닛메이드
      2008.05.26 20:35
      변수가 nil이란것이 정확히 어떤것인지 모르겠네요;;; frame에서 변수라는것이 정확히 어떤것이죠?
    • 깔쌈보이
      2008.05.26 20:50
      xFrame, xForm <= 이 것 역시 변수라고 볼 수가 있습니다. 근데 설마, xFrame, xForm이 클래스 명칭...
    • 미닛메이드
      2008.05.26 23:11
      type TfrmChat = class(TTntForm) //위에서 말한 xForm 클래스 구현부분 fmChatRo...
    • 미닛메이드
      2008.05.26 23:12
      xForm, xFrame, yFrame 등은 파일이름입니다. fmChatRoom 은 폼 이름
    • 이정욱
      2008.05.26 23:41
      위의 질문에서는 사실 잘못된 점을 꼬집어 드릴수 없을것 같습니다. 엑세스 바이올레이션 에러는 선언...
    • 한상훈
    • 2008.05.26 09:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.05.26 11:12
      질문이 잘 이해가 안가지만.. 아이템의 StateIndex 값을 조절 하시면 됩니다.
    • 한상훈
      2008.05.26 22:47
      예를들어 ListView1.SmallImages:=ImageList1; ListView1.StateImages:=ImageList1; 여기서 Imag...
    • steps
    • 2008.05.25 00:56
    • 9 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2008.05.25 01:16
      그냥 윈도우에 작업을 등록해서 사용하시면 될 듯 보이는데 굳이 델파이 코드로 등록을 해야할까요? 제...
    • steps
      2008.05.25 01:28
      앞으로의 배포문제를 념두에 두고 저에게 준 과제입니다. 사용자보고 인스탈후에 제어판의 scheduled ta...
    • 김병윤
      2008.05.25 02:08
      어차피 인스톨한 어플에서 등록을 하더라도 윈도우 스케줄러에 등록하려면 로그인 계정이 누구인지 알고...
    • steps
      2008.05.25 03:46
      당장은 가르쳐주신대로 콘솔호출방식을 리용하렵니다. http://www.Planet-Source-Code.com/vb/scripts/S...
    • 이정욱
      2008.05.25 09:09
      배포하시기에 더 좋은 방법은 그 어플리케이션을 서비스 형태로 만드셔서 특정시간에 쿼리를 수행하게 하...
    • 구창민
      2008.05.26 06:36
      안녕하세요..아래 내용을 참고 하세요... unit Unit1; interface uses Windows, Messages,...
    • steps
      2008.05.27 00:34
      이종욱님 구창민님 정말 감사합니다. 귀한 시간 내시여 래핑까지 해주신 창민님께 다시 한번 인사드립니다.
    • • • •
    • 이정욱
      2008.05.24 20:28
      Implementation 위쪽에 선언해주세요 ^^ 밑쪽에 있으면, 그 유닛 안에서만 참조가 가능합니다.
    • 이정욱
      2008.05.25 00:32
      BDE는 제가 오랫동안 안해서.. 기억이 하나도 나질 않네요.. 시간이 좀 있으시다면 ODAC 라는 써드파...
    • 강신구
    • 2008.05.23 23:13
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2008.05.23 23:25
      안녕하세요.. 아래와 같이 설명되어 지구 있습니다.. ◇ DLL에서의 전역변수 DLL에서 선언된 전...
    • 강신구
      2008.05.23 23:36
      답변에 감사드립니다.. 한가지 더 문의 드리고 싶은데요.. 아래 설명에 따르면.. 제가 문의드린 내용...
    • 구창민
      2008.05.24 02:03
      음.. DLL 내의 전역변수를 쓰레드에서 다루어 본적이 없어서 ..쩝.. 간단한 문제가 아닌거 같네요.. ...
    • steps
      2008.05.24 00:05
      질문에 1번이 작업 종료후의 aaa 값을 리턴 받아 봤는데.. 값이 초기화 되어 있었습니다.. 라고 되여있...
    • 김원기
    • 2008.05.23 00:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.05.23 08:40
      지금 열려 있는 코드들이 어디에 저장되어 있는지 확인해 보세요. 혹시라도 프로젝트를 카피해서 다른 ...
    • 머문자리
      2008.05.26 18:19
      흠.. 저도 소스를 복사해서 업데이트 하다가 원본실행파일만 실행시킨 어처구니 없는 일들이 기억이 나네...
    • 김원기
      2008.06.18 20:13
      감사 해요. 감사 합니다. 이제야 감사하다는 말을 남기네요 ㅠㅠ 바뻐서.. 나중에 남긴다는 말을.....