DOS 배치 파일 형식으로 작업하다가
문자열 처리나 함수 부분에서 답답한 부분이 많아
다른 스크립트 언어로 옮겨 탈까 생각하고 있었다.

오늘 회사일 하는데 배치 파일이랑 Perl을 섞어 써야하는 것 같아서
요새 윈도우에서 미는 PowerShell로 작업하기 시작했다.

다른 언어처럼 language specification도 찾아보기 힘들고
기존에 윈도우 배치 파일에서 쓰던 명령어도 없어져서 난감하네...

pause를 대신하는 명령어가 없는 것 같은데...
찾아보니 아래와 같이 함수를 만들어 쓰면 되는 듯

function Pause ($Message="Press any key to continue...")
{
Write-Host -NoNewLine $Message
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Write-Host ""
}

출처 : http://blogs.msdn.com/powershell/archive/2007/02/25/pause.aspx

파워쉘 홈페이지
http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx

P.S. 실행시에 디지털 서명이 되어 있지 않으면 보안 오류 뜨는데...
윈도우7에서는 실행시 서명 안된 것도 실행하게 설정 바꾸는 것도 오류 뜨고 불편하네 -ㅅ-


728x90
엑셀에서 열고 있는 파일을 읽을려고 하면 CreateFile로 열려고 하면
ERROR_SHARING_VIOLATION 오류가 발생하고 있었다.

이 오류는 다른 프로세스가 열려는 파일을 쓰고 있을 때 발생한다.

HANDLE CreateFile(
  LPCTSTR lpFileName,
  DWORD dwDesiredAccess,
  DWORD dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDisposition,
  DWORD dwFlagsAndAttributes,
  HANDLE hTemplateFile
);

원인 중 하나는 dwShareMode를 잘못 설정했을 경우다.

Excel의 경우 File을 FILE_SHARE_READ | FILE_SHARE_WRITE로 걸어놓고 있는거 같다는...
728x90
분명 유저 id / password도 맞고
서버에 write 권한도 있고
다른 사람 컴퓨터에는 해당 유저로 commit이 잘되는데...
내 자리에서 commit하려고 하면 authrozation failed 오류가 발생할 때...

repository url을 확인해볼 것...

repository url의 대소문자가 잘못되어 있으면 read는 되지만...
commit은 안되더라는 -ㅅ-
728x90

사서함에서 자동 보관하는건 잘 되는데
다른 아웃룩 데이터 파일에서 자동 보관하는건 뭔가 이상하게 안되더군...
그래서 하는 방법이 없나 알아보다가 ...
결국은 스크립트를 짜고 있다는 ... ㅡㅜ

사용 방법은 다음과 같음...
* archiveEmail.cls 긁어다가 아웃룩 스크립트에 붙여 놓고
* expireTime을 원하는 날짜로 수정
* 아웃룩 매크로에서 archiveEmail 실행
* 백업할 폴더 선택
* 저장할 폴더 선택

아웃룩이 먹통이 된 것 처럼 보이지만 백업하고 있는 거임...( -_-)

ToDo
* 진행 상황 보여주는 폼 보여주기
* 가끔 백업안되는 애들 있는데 분석해서 수정하기
* 만료일 선택할 수 있는 폼 보여주기

P.S.
* 아웃룩 2007에서만 테스트한거임
* 차라리 파일을 다른 이름으로 만들고
새 아웃룩 파일 만든 다음에 폴더 구조만 복사하고
규칙만 적용하는게 더 나을려나 -ㅅ-

728x90
TEST_MACRO(ClassA);

TEST_MACRO가 선언되지 않은 상태에서 컴파일을 하면 컴파일이 될까 안될까?

Visual Studio 2003에서 컴파일하면 에러없이 컴파일되더라는...
Visual Studio 2008에서는 에러 뜬다는...

매크로명에 오타낸 것도 모르고
왜 브레이크 잡아둔 코드 블럭에 안들어오는지 1시간동안 짜증내고 있었다는...

대략 난감할 따름...
728x90
다른 사람이 작업한 소스를 수정중인데
DllImport로 연결된 dll을 로드할 수 없다고
System.DllNotFoundException이 떴다.

명시된 path에 해당 dll이 떡하니 있는데도 발생하니 난감할 따름...
오타가 있는 건가?
Visual Studio 2008 문제인가?
한 3일째 봤는데...

결론은 문제 dll과 연관된 dll이 없어서 생기는 문제였다는...
( 참고 : http://blog.naver.com/techshare/100066142942 )

연관된 dll 검사해주는 Dependency Walker를 이용하면 문제되는 dll을 찾을 수 있다.
http://www.dependencywalker.com/
728x90
올바른 방법은 아직 모르겠는데...

일단 내가 사용하고 있는 방법은 다음과 같다.

open($out, ">:raw:encoding(UTF-16LE)", $outFileName) || die "cannot open $outFileName";
print $out "\x{FEFF}"; # write UTF-16LE BOM
print $out "TEST\n";
close($out);

Perl Unicode(ANSI, utf-8, utf-16LE, ...) 부분은 뭔가 알듯 말듯 모호하네...
728x90
파일 이름을 왼쪽에서 오른쪽 처럼 바꿀려면 일일이 바꿔줘야 했는데...

xxxx_yy_01.ext -> xxxx_01.ext
xxxx_yy_02.ext -> xxxx_02.ext
xxxx_yy_03.ext -> xxxx_03.ext

StExBar의 Rename 툴을 쓰면 쉽다능...

오른쪽 마우스 버튼 클릭 > StEx > Rename 를 선택하면
Rename 다이얼로그에서 다음처럼 입력하고 Rename을 실행하면 된다능

Match: xxxx_yy_(.*).ext
Replace: xxxx_$1.ext

http://tools.tortoisesvn.net/StExBar
728x90
VS 2008에서 만든 바이너리의 경우 themida로 패킹할 경우 실행이 안되는 경우가 있다.
이 경우에는 Option > Virtual Machine > Entry Point Virtualization을 0으로 설정하면 실행이 될 수도 있다.

http://www.oreans.com/kb/?View=entry&EntryID=1
728x90

class의 member function을 pointer를 사용할려고 할 때
기존에 member function 내에서는 'function'이름만 적어주면 문제가 없었다.
VS 2008에서는 다음과 같은 오류 메시지가 보인다.

error C3867: 'A::function': function call missing argument list; use '&A::function' to create a pointer to member

에러 메시지에서 보이듯이 기존에 'function'만 적어줬던 부분을
'&A::function' 형식으로 바꿔주면 ok
728x90

+ Recent posts