제2의 비엔지니어 인생관을 꿈꾸며

Posted
Filed under Windows Server
https://blogs.technet.microsoft.com/askcore/2014/04/24/removing-net-framework-4-54-5-1-removes-windows-20122012r2-ui-and-other-features/

닷넷4.5 버젼을 재설치할려고 삭제한후 아래 그림처럼 벌어지는 멘붕 상황이였습니다.

사용자 삽입 이미지
서버코어 모드로 전환되어버렸습니다. 코어모드보다 더 심각하게 path 경로가 안먹혀서 일부 시스템 명령어 조차도 실행이 안되는 현상이 발생합니다. 특히 powershell~!!!!

사용자 삽입 이미지

보통 삭제할때는 내용 잘 읽어봐야 되는데 그냥 다음다음 하다보니 이런 상황이 발생하는가 봅니다.
해결방법은 아래와 같습니다.


DISM.exe /online /enable-feature /all /featurename:NetFx4

DISM.exe /online /enable-feature /all /featurename:MicrosoftWindowsPowerShell


사용자 삽입 이미지

파워쉘을 설치하였으니 powershell 을 실행합니다. 그런데 path 경로가 변수처리 되어 있지 않아서인지 없는 파일이라고 나오네요. 그러면 taskmgr 작업관리자 명령어를 실행하고 작업관리자에서 실행 명령줄에 powershell 을 실행하면 powershell 창이 실행됩니다.
사용자 삽입 이미지

Install-WindowsFeature Server-Gui-Shell, Server-Gui-Mgmt-Infra

명령줄을 실행하고 설치가 완료되면 재부팅을 실시합니다.

Restart-Computer
사용자 삽입 이미지

재부팅하고 다시 로그인을 하면 GUI가 복원되어 정상적으로 사용할수 있습니다.
2018/02/12 13:22 2018/02/12 13:22
Posted
Filed under C#
가끔 개발하다보면 .net framework 버전 vs 비주얼 스튜디오와의 버전 vs 컴파일러버전 과의 궁금할때가있다. 물론 개발만 잘하면되는데, 그래도 궁금하다. .framework 1.0 (1.1?)은 공식적으로 버린지 오래고? ,  2.0(설치되어있어야함) ~ 비쥬얼 스튜디오 자신의 버전까지 지원한다. VisualStudio 2012는 3.0  ~ 4.5까지 설정에 따라 컴파일 이 된다. (단, framwork가 없으면 설치 해야함)


사용자 삽입 이미지



[가로버전]



이미지 출처:  http://sktype.tistory.com/112
이미지 편집 :  by sooli.com Pluginn 

2018/02/08 19:13 2018/02/08 19:13
Posted
Filed under C#
2년전 쯤 모바일 웹에서 이미지 업로드를 하는 페이지가 있었는데, 모바일로 사진을 찍고, 업로드를 하면, 세로로 촬영한 이미지가 가로로(옆으로) 등록되는 기이한 현상이 일어났다. 당시 잠깐 이유를 생각해보면, 스마트폰의 사진 해상도가 고해상도를 지원하면서, 촬영되는 사진이 아마 폭에따라  가로로 저장되는 이유가 아닐가 생각한다.  아래 코드는 classic ASP 에서 사용하기위해 .net 으로 작성된 lib(dll)
코드이다. 그 당시 버전 관리를 위해 SN(strong name) 생성 후 Regasm ,  gacutil 로 assembly 등록 후  classic ASP 에서 사용하였다

작동원리 : 방법은 간단하다 , 이미지의 rotaton 정보를 가지고 그만큼 반대로 또는 정방향으로 회전시켜 사진을 똑바로 세우는것이다.
아래 이미지는 이미지의 Rotation 정보를 얻어냈을때 리턴되는 값들이다 
 
1:정방향  2:정방향이긴한데, 뒤집어진경우 , 8: 90도 우측으로 기울어진경우 , 아래 이미지를 참고하여 로테이션 시키면된다.


사용자 삽입 이미지


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace MimiClass
{
    public class Utility
    {
        private string imgName;
        private int stdWidth;

        public string targeImage { set { this.imgName = value;}}
        public int targetWidth { set { this.stdWidth = value;}}
        public Utility()
        {
        }

        public void doReSize()
        {
            this.reSizeEXIF();
        }


        public void reSizeEXIF()       
       {

           //  당시 스토리지를 UNC  명을 익식하게게끔 하려했으나 보안 오류떠서, 네트워크 드라이브로 대체 했던기억이 난다.  
           // 물론 로컬로 저장되는 이미지인경우 아무 상관없다.
          

            string imageF = @"X:\파일명.jpg";
            string iPath = string.Empty;
            int EXIF = 0;
            int iW = 0, iH = 0, iTW = 0, iTH = 0;
            int iStW;
            iStW = this.stdWidth;
            PropertyItem[] PropertyItems;
            Image simg = new Bitmap(imageF);
            Image tImg = null;
            PropertyItems = simg.PropertyItems;
            iW = simg.Width;
            iH = simg.Height;
            foreach (PropertyItem p in PropertyItems)
            {
                if ((p.Id == 0x0112 || p.Id == 5029 || p.Id == 274))
                {
                    EXIF = (int)p.Value[0];
                    break;
                }
            }
            if (EXIF == 0)
            {
                setEXIFRoate("W", ref simg, out tImg, iStW, iW, iH, ref iTW, ref iTH);
            }
            else
            {
                if (EXIF == 6)
                {
                    setEXIFRoate("H", ref simg, out tImg, iStW, iW, iH, ref iTW, ref iTH);
                    tImg.RotateFlip(RotateFlipType.Rotate90FlipNone);
                }
                else if (EXIF == 8)
                {
                    setEXIFRoate("W", ref simg, out tImg, iStW, iW, iH, ref iTW, ref iTH);
                    tImg.RotateFlip(RotateFlipType.Rotate270FlipNone);
                }
                else if (EXIF == 3)
                {
                    setEXIFRoate("W", ref simg, out tImg, iStW, iW, iH, ref iTW, ref iTH);
                    tImg.RotateFlip(RotateFlipType.Rotate180FlipNone);
                }
            }
            imageSave(tImg, imageF);

            simg.Dispose();
            tImg.Dispose();

            simg = null;
            tImg = null;        
        }
        private void imageSave(Image t, string imageF)
        {
            string imageT = string.Empty;
            string iPath = string.Empty;
            imageT = imageF.Substring(imageF.LastIndexOf("\\"));
            iPath = imageF.Substring(0, imageF.LastIndexOf('\\'));
            iPath = string.Concat(iPath, "\\re\\");
            if (!Directory.Exists(iPath))
                Directory.CreateDirectory(iPath);

            iPath = string.Concat(iPath, imageT);

            t.Save(@iPath);
            t.Dispose();
            t = null;
        }
        private void setEXIFRoate(string stGb, ref Image s, out Image t, int iStW, int iW, int iH, ref int iTW, ref int iTH)
        {
            // 이미지가 width가 넓은 사진일경우
            if (stGb == "W")
            {
                // 가로가 길경우 가로와 세로를 바꾼
                iTW = iStW;
                iTH = Convert.ToInt32((iStW * 1.0) / ((iW * 1.0) / (iH * 1.0)));
            }
            else
            {
                // 세로가 길경우 세로와 가로를 바꿈 
                iTH = iStW;
                iTW = Convert.ToInt32((iStW * 1.0) / ((iH * 1.0) / (iW * 1.0)));
            }
            t = new Bitmap(iTW, iTH);
            Graphics g = Graphics.FromImage(t);

           // 화질유지를 위해 고화질 모드 설정
            g.InterpolationMode = InterpolationMode.High;
           
           // 딱 자르면 흰색 라인이 생겨서 +1 추가더 자르고 -1 로 뺏
            g.DrawImage(s, new Rectangle(-1, -1, iTW + 1, iTH + 1)); 음
            g.Dispose();
            g = null;
        }
    }
}
2018/02/08 16:17 2018/02/08 16:17