(포스팅 2022.02.16)
프로그램 제작시, 바이너리의 사용기간을 제한하고 싶을 때가 있습니다.
업무용 프로그램 배포시에 첫 배포는 그럭저럭 잘 되지만, 이후에 갱신용 배포를 할 때는 사용자들이 업데이트를 잘 하지 않는 경우가 있습니다.
개발이 진행될 수록 각 버전간의 차이가 발생하여 업무에 혼선이 커지게 됩니다.
이를 방지하기 위하여, 바이너리 생성시에 사용기간을 제한합니다.
업데이트를 하지 않은 사용자에게서 '프로그램이 동작하지 않아요'라고 연락오면,
"제가 새 버전을 배포했는데 업데이트를 하지 않으셨네요"
라고 말하면서 갱신된 버전을 전달하면 됩니다.
C 에서는 __DATE__ __TIME__ 이라는, 빌드시점을 알 수 있는 문자열이 있었습니다만 C# 에는 없습니다.
아무리 찾아도 방법이 없어서, 다음의 방법으로 빌드시점을 넣었습니다.
다음은 빌드시점을 표시하는 소스코드입니다.
'프로그램네임스페이스' 에 자신이 사용하는 namespace 를 넣으세요.
1
2
3
4
5
6
7
8
9
10
11
|
// FILE : BuildDate.cs
namespace 프로그램네임스페이스
{
internal class BuildDate
{
static public string str =
"2022-02-16_13:56:05.78"; // 자동으로 업데이트할 문자열
static public System.DateTime time;
}
}
|
cs |
다음은 빌드시점을 갱신하는 스크립트입니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
:: FILE : update_date.bat
echo namespace 프로그램네임스페이스 > BuildDate.cs
echo { >> BuildDate.cs
echo internal class BuildDate >> BuildDate.cs
echo { >> BuildDate.cs
echo static public string str = >> BuildDate.cs
echo ^"%date%_%time%^"; >> BuildDate.cs
echo static public System.DateTime time; >> BuildDate.cs
echo } >> BuildDate.cs
echo } >> BuildDate.cs
|
cs |
해당 파일을 update_date.bat로 저장합니다.
실행될때마다 BuildDate.cs 파일의 시간문자열을 갱신하게 됩니다.
아래와 같이 프로젝트에 포함시킵니다.
빌드타임 갱신용 스크립트를 추가합니다.
아래와 같이 '프로젝트 속성 -> 빌드이벤트 -> 빌드전 이벤트' 로 진입하여 스크립트를 입력해 줍니다.
여기까지 진행하시고 빌드해보시면, 빌드를 할 때마다 BuildTime 이 갱신됩니다.
소스코드에 변경사항이 없는 상태에서 빌드 날자를 갱신하시려면 '다시 빌드'를 해 보세요.
프로그램의 시작점에, 빌드시간 후 얼마나 지났는지를 체크하는 코드를 넣어 줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
FILE : Program.cs
static void Main()
{
// 빌드시 자동갱신되는 BuildDate.cs 의 문자열을 해석하여 빌드시점을 확인한다.
// 문자열 예제 : "2022-02-16_13:44:15.22"
char[] sperator = new char[] { '\t', '-', '_', ':', '.' };
int[] values = new int[6]; // 년, 월, 일, 분, 시, 초
int pos = 0;
foreach (string str in BuildDate.str.Split(sperator))
{
values[pos] = Convert.ToInt32(str);
pos++;
if (pos >= values.Length) break;
}
BuildDate.time = new DateTime(values[0], values[1], values[2], values[3], values[4], values[5]);
// 기간제한 60일
TimeSpan diffTime = DateTime.Now - BuildDate.time;
if (diffTime.TotalDays > 60) return;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm00());
}
|
cs |
소스코드 내에선 다음과 같은 식으로 빌드시점을 참조할 수 있습니다.
1
|
textBox.Text += "(c) TTT-System. Build:" + BuildDate.time.ToString("yyMMdd_HHmmss") + Environment.NewLine;
|
cs |
포스팅은 여기까지입니다.
감사합니다.
(C언어) ARRAY_SIZE()로 배열크기 측정 시 유의점 (0) | 2022.10.07 |
---|---|
NULL을 사용하는 이유 (2) | 2022.10.05 |
C와 다른 언어의 차이점 (0) | 2022.04.12 |
C# 여러 커맨드를 한번에 실행 (0) | 2022.04.08 |
c# 문자열을 라인별로 분리하는 방법 (0) | 2022.04.08 |
댓글 영역