2010. 5. 7. 17:35

관리하는 서버가 많을 경우 손쉽게 서버의 계정 비밀번호를 변경하고 싶을 수 있다.
이런 고민에서 시작해서 만들어 보았다. 
(여러 네트워크 환경에서 확인 해보지 못했고 동일 네트워크 환경에서는 정상적으로 동작하는 것을 확인했다.)

1. 이전 비밀번호를 알고 새 비밀번호로 변경하고자 할 경우
using System.DirectoryServices; // 참조추가를 해야 사용 가능하다.
...
string userPath = string.Format("WinNT://{0}/{1}", TargetServer, UserName);
using (DirectoryEntry userEntry = new DirectoryEntry(userPath))
{
object[] password = new object[] { this.txtOldPw.Text, this.txtNewPw.Text };
object ret = userEntry.Invoke("ChangePassword", password);
userEntry.CommitChanges();
}


2. 이전 비밀번호를 몰라도 새 비밀번호로 리셋하고 싶을 경우
string userPath = string.Format("WinNT://{0}/{1}", TargetServer , UserName);
using (DirectoryEntry userEntry = new DirectoryEntry(userPath))
{
object[] password = new object[] { this.txtNewPw2.Text };
object ret = userEntry.Invoke("SetPassword", password);
userEntry.CommitChanges();
}


참고로 TargetServer는 IP로 접근할 경우 오류가 발생하였고.. 컴퓨터명으로 접근해야 정상적으로 처리가 되었다.
그리고 administrator 계정의 비밀번호도 변경이 가능했다.

샘플

참고

Posted by CoolDragon
2010. 4. 14. 16:40

1. COM+ 개발
2. 개발 완료 후 서버에 Component 등록
   - 개발중에 snk를 생성하여 전역어셈블리캐쉬(GAC)에 등록한다.
   - regasm 명령어로 레지스트리 등록
3. 등록확인 
   - COM+는 제어판 > 구성요소 서비스에서 클래스명이 확인이 가능
   - COM은 레지스트리에서 GUID키값에서 ProgID에서 클래스명을 확인 가능
4. component 클래스명 및 interface를 확인
5. asp에서 아래 처럼 사용하면 된다.사용하기
<%
set complus   = Server.CreateObject("ComPlusExample.ComPlusClass")

Response.Write complus.PerformAddition(10, 30) & "<br/>"
Response.Write complus.PerformSubtraction(10, 30) & "<br/>"
%>


Posted by CoolDragon
2009. 10. 28. 14:39

포스트를 열심히 올리고자 마음 먹었지만
전혀 올리지 못 하고있었다. (마음만 앞섰을 뿐이고.. 그리고 귀찮았을 뿐이고..)
뭐 암튼 간만에 포스팅을 한다.

c#에서 DataTable 클래스에서 DataTable끼리의 Merge와 Sort가 있다. (그 밖에도 많겠지...)

대략 소스와 주석으로 설명을 대신하고자 한다.

 private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = GetData(1, 3);
            DataTable dt2 = GetData(2, 5);

// Merge
            DataTable dt3 = dt.Copy();
            dt3.PrimaryKey = new DataColumn[] { dt3.Columns["A"] };
            dt3.Merge(dt2);

// Sort
            DataView view = dt3.DefaultView;
            view.Sort = "B DESC, A ASC, C DESC";

            this.dataGridView1.DataSource = dt;
            this.dataGridView2.DataSource = dt2;
            this.dataGridView3.DataSource = view.ToTable();
        }

        DataTable GetData(int from, int to)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("A");
            dt.Columns.Add("B");
            dt.Columns.Add("C");
            Random rnd = new Random((int)DateTime.Now.Ticks);
            for (int i = from; i <= to; i++)
            {
                DataRow dr = dt.NewRow();
                dr["A"] = i;
                dr["B"] = rnd.Next(1, 5);
                dr["C"] = rnd.Next(1, 5);
                dt.Rows.Add(dr);
            }
            return dt;
        }


추가적인 설명으로
a.Merge(b); 처럼 Merge할 경우 b테이블의 데이터를 a테이블에 포함시키는 거라 할 수 있다.
만약 DataTable의 PrimaryKey 설정을 한다면 b테이블 데이터중 a테이블의 Key 컬럼과 중복되는 데이터를 제외한 데이터가 a테이블로 포함된다. (이해를 돕고자 이미지를 첨부)

PrimaryKey 설정 전

PrimaryKey 설정 후






Posted by CoolDragon
2009. 5. 21. 17:16

1. Visual Studio 2008 실행한다. (VS 2005도 특별히 틀릴것 같진 않다.)
2. 프로젝트를 열거나 생성한다. (C#.NET 프로젝트(클래스라이브러리 또는 응용프로그램 등등)
3. 아래 참조 추가를 한다. (아마 오피스가 설치되어있어야 할것 같다.)


4. 그후엔 아래와 같이 코드를 사용하면 된다.


using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;


            OpenFileDialog open = new OpenFileDialog();
            if (open.ShowDialog() == DialogResult.OK)
            {

                ApplicationClass app = new ApplicationClass();
                Presentation ppt = app.Presentations.Open(open.FileName, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);

                for (int i = 0; i < ppt.Slides.Count; ++i)
                {
                    ppt.Slides[i + 1].Export(@"E:\Test\VS2008\Winform\TestPPT\TestPPT\bin\Debug\" + i + ".png", "PNG", (int)ppt.Slides[i + 1].Master.Width, (int)ppt.Slides[i + 1].Master.Height);
                }
                ppt.Close();
                app.Quit();
            }

Posted by CoolDragon