Posted by 병아리

읽는게 좋을듯

Posted by 병아리
레지스트리에서 이 위치로 간다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

DWORD 속성으로 새 키를 생성한 후 이름은 없애고 싶은 계정으로 해준다.

키값은 0이 invisible 이고, 1이 visible이다.
Posted by 병아리
이전에 이와 거의 같은 내용의 포스팅을 한 적이 있다.

나도 물론 그때 포스팅 한 내용을 그대로 썼었는데 자꾸 오류가 발생하는 것이었다.

뭐가 문제인가 해서 test하는 프로그램을 만들어서 직접 실험하여 결과를 올려본다.

혹시 나와 비슷한 고민을 한 분이 이리저리 방황하다 이 포스팅을 보게된다면, 이 글을 통해 많은 도움이 되기를 잠시 바래본다.

우선 프로그램 이름은 StartTest이고 시작 위치는 테스트를 쉽게 하기 위해 "C:\StartTest.exe"에 놔두었다.
인터넷에서 경로를 받아오는 법이 여러 개 있길래 동시에 돌려본 것이다.
이해를 쉽게하기위해 앞에 메소드 이름 그대로 인덱스도 넣었다.

1. 그냥 실행시
사용자 삽입 이미지

그냥 실행시에는 보다시피 아무 문제가 없다.

 그냥 실행시에는 밑에 보이는 것 처럼 아무 문제없이, 의도한 대로 실행되는 것을 알 수 있다(대조군).

2. 윈도우 시작시 시작프로그램에 바로가기를 넣어놔서 실행될 때
사용자 삽입 이미지

시작프로그램에 있던 바로가기에 의해 실행된 경우에도 아무 문제 없다.

 바로가기에 의해 실행된 경우에도 아무 문제 없음을 알 수 있다(so far, so good).

But!!!

3. 윈도우 시작시 레지스트리를 이용하여 실행될 때
레지스트리 경로는 이 블로그의 다른 포스팅에 나와있다.
사용자 삽입 이미지

윈도우가 시작될 때 레지스트리를 통해 실행되는 경우 결과값이 다른 것을 알 수 있다.

봐서 알겠지만 뭔가 다르다는 것을 알 수 있다(참고로 Admin은 내 계정명이다).

솔직히 이유는 잘 모르겠다.
마음속에 짐작이 가는게 몇개 있긴 하나 잘 알지도 못하면서 공개적인 곳에 사실인냥 써놓을 수는 없으므로, 이유에 대해선 설명하진 않겠다
혹시 아는 분이 계시다면 댓글이나 방명록에 남겨놔서(even though secretly!) 알려주면 정말 고맙겠다.

따라서 C# 프로그램 내에서 프로그램이 속해있는 폴더 경로를 받아오려면 Application을 위주로 사용하는 것이 좋을 듯 싶다(게다가 파일 이름을 붙였다 떼었다 할 수도 있다!).

ps. 한가지 안타까운 점은 Application은 System.Windows.Forms를 이용하므로 콘솔에서는 아마 못쓸 것이다(따라서 콘솔에선 모르겠다-_-).

%% 네줄요약 %%
C#으로 코딩할 때 프로그램 경로가 필요한데, 하필 그 때가 윈도우 시작이라면 Application.___Path 위주로 사용하는 것이 좋다(중간중간에 받아오는 경우라면 아마 문제없을것이다).
이게 싫으면 시작프로그램에 shortcut을 넣던가 절대경로로 하던가 실행시켜주는 넘을 만들어라.
만약 윈폼이 아닌 콘솔이라면 니 앞가림은 니가 알아서해라-_-

//출처 : 데브펌 + 내 실험
Posted by 병아리

어따 쓰는건진 나중에 포스팅하고 우선 백업용-_-

Posted by 병아리

ClassesRoot
형식(및 클래스)과 해당 속성에 대한 정보를 저장합니다.

CurrentUser
사용자 기본 설정에 대한 정보를 저장합니다.

LocalMachine
로컬 컴퓨터의 구성 정보를 저장합니다.

Users
기본 사용자 구성에 대한 정보를 저장합니다.

CurrentConfig
사용자와 관련되지 않은 하드웨어 정보를 저장합니다.

PerformanceData
소프트웨어 구성 요소에 대한 성능 정보를 저정합니다.

DynData
동적 데이터를 저장합니다.

// 출처 : MSDN 일껄

'Projects > 일반론' 카테고리의 다른 글

Microsoft DirectX, AudioVideoPlayback Dll  (0) 2008.03.02
해상도로 뭔가를 해야 할 때 in C#  (0) 2008.02.18
ini 파일 사용하기 in C#  (0) 2008.01.29
Posted by 병아리
Screen 클래스를 이용하면 해상도를 이용하여 뭔가를 해야 할 때에 더욱 편리하게 할 수 있다.

예를 들어 현재 해상도를 받아오려면

Screen.PrimaryScreen.Bounds.Width
Screen.PrimaryScreen.Bounds.Height

를 이용하면 된다.

이것뿐만 아니라 여러 메소드들이 있으므로 이들을 응용하면 더욱 깔끔한 프로그램이 되지 않을까 생각해본다.

// 출처 : 데브펌
Posted by 병아리

프로그램의 각종 설정값을 저장하는 방법은 많겠지만(레지 xml등등) 많이쓰이는 ini를 잘 몰랐는데 매번 찾아보기 귀찮아서 퍼와봤다.

1. 클래스
using System;
using System.Text;
using System.Runtime.InteropServices;

namespace Win32Tool
{
    public class IniControl
    {
        [DllImport("kernel32")]
        public static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);
        [DllImport("kernel32")]
        public static extern uint GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName);
        [DllImport("kernel32")]
        public static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);
    }
}
 
2. 사용예

string inifile = Environment.SystemDirectory + "\\Test.ini";
StringBuilder result = new StringBuilder( 512 );
Win32Tool.IniControl.GetPrivateProfileString( "색션", "키1", "error", result, 512, inifile );
Console.WriteLine( result.ToString() );
uint result2 = Win32Tool.IniControl.GetPrivateProfileInt( "색션", "키2", 0, inifile );
Console.WriteLine( Convert.ToString( result2 ) );
Win32Tool.IniControl.WritePrivateProfileString( "색션", "키3", "설정할값", inifile );

// 출처 : 데브펌

Posted by 병아리
이 글보다는 현재 실행중인 프로그램의 절대경로 받아오기 in C# 를 참고하기를 추천합니다!

1. 확장자를 제외한 프로세스 이름 가져오기
System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
String s = currentProcess.ProcessName;

2. 현재 실행되고 있는 프로그램 디렉토리
String strFolder = System.IO.Directory.GetCurrentDirectory();

이 둘을 합치면 완전체는

System.IO.Directory.GetCurrentDirectory() + "\\" + this.currentProcess.ProcessName + ".exe"

// 출처 : 데브펌
Posted by 병아리
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

이 안에 문자열로 프로그램 이름과 경로 설정
Posted by 병아리

사이드바 열기