VirtualBox(VM)에서 공유폴더(윈도우7, 리눅스) 설정

윈도우 호스트에서 리눅스를 가상OS로 돌리다보면 파일 공유가 필요한 시점이 생긴다.

아래에서는 호스트OS와 가상OS 간 파일 공유가 쉽도록 공유폴더 설정하는 법을 적어본다!


1. 폴더 생성
윈도우에 폴더를 생성하고 리눅스에서 설정을 마친 후 공유폴더가 제대로 동작하는지 확인 하기 위해 아무 파일이나 복사(또는 텍스트 파일 생성) 해놓는다.
 (여기서는 C:로 한다. D:, E: 아무 곳이나 상관없이 가능하다.)
C:winShare

2. 버추얼박스 설정
2.1. 공유 폴더 메뉴 선택
버추얼박스 메뉴 중 [장치]-[공유 폴더 설정]-[공유 폴더] 선택 후 우측의 십자가 모양 선택
 (OS가 실행되고 있는 버추얼박스가 아닌 가상 OS를 실행시키는 관리자 윈도우)

2.2. 공유 폴더 선택
'폴더 경로' 에서 '기타'를 선택 후 아까 만든 'C:winShare' 폴더를 선택하고, '자동 마운트', '항상 사용하기' 선택 후 '확인' 누름. 다시 한 번 '확인'을 눌러 창 닫음.


3. 리눅스 설정
리눅스 터미널을 실행하고 아래의 명령어를 입력한다.
$ sudo mkdir /mnt/share
$ sudo mount -t vboxsf winShare /mnt/share
$ ls /mnt/share

'1. 폴더 생성'에서 복사해 놓은 파일이 보이는지 확인하고, 보이면 성공!


4. 링크 연결
But! /mnt/share 폴더에서 작업을 하기는 불편하니 링크를 걸어 편하게 사용하자~
(pwd 명령으로 링크를 만들 곳의 경로를 확인하고 생성한다.)
$ pwd
/home/deoks
$ sudo ln -s /mnt/share /home/deoks/share
$ ls share

이번에도 파일이 제대로 보이면 성공! 편하게 쓰면 된다.


5. 번외
*단점은 리눅스가 재부팅 되면 마운트가 해제되기 때문에 다시 해줘야 한다는 것.
가상 OS(리눅스)를 재부팅하면 마운트가 해제되서 다시 연결해야 하는 불편함이 있다. 아래와 같이 쉘스크립트를 만들어서 재부팅하고나면 실행하도록 한다.

$ vim mkShareFolder.sh
   #! /bin/bash
   sudo mount -t vboxsf winShare /mnt/share
   sudo ln -s /mnt/share /home/deoks/share
$ chmod 755 mkShareFolder.sh
$ ./mkShareFolder.sh

진짜 끝!

Install Ubuntu 14.04.2 LTS on Virtualbox 4.3.12.


Install Ubuntu 14.04.2 LTS on Virtualbox 4.3.12.


새로운 환경에 우분투를 설치하고자 우분투 14.04.2 32bit와

버추얼박스(Virtualbox) 4.3.26을 다운받았다.


버추얼박스를 설치하고 우분투를 설치하려고 하는데 안된다...

자꾸 에러가 발생한다. -_-;;

구글링 해보니 4.3.12 사용을 적극 추천한다.


추천을 따라 버추얼박스(Virtualbox) 4.3.12 를 설치한다.


우분투를 설치해보니 잘 된다.


오호~ 좋아!!

이제 해상도 조절해서 써야지~


근데 게스트확장설치만하면 자꾸 아래 같은 에러가 발생한다. -_-;;



E:unable to correct problems you have held broken packages



뭐지 -_-



다시 설치해보고, 지우고, 이미지를 새로 다운받아 설치해보고, 재부팅만 여러번,,

안된다.



다시 구글링,,,,



수 많은 글을 읽고, 해보지만 안된다.

아,,, 스트레스,,,


그러던 중 맨 아주 조그맣게 달린 댓글을 본다.

해본다.

된다.


ㅡㅜ

Thanks to conradk.


서론이 너무 길었고,,

본론은 아래 세 줄이다.




$ sudo apt-get remove libcheese-gtk23

$ sudo apt-get install xserver-xorg-core

$ sudo apt-get install -f virtualbox-guest-x11


끝.


C#, 중복실행 체크 및 방지 코드

C#에서 프로그램 실행 시 이미 실행되고 있는 경우

실행되지 않도록 체크하고 방지해야 하는 일이 빈번히 발생한다.

아래 코드를 적어본다.

using System;
using System.Threading;
using System.Windows.Forms;


namespace runningCheck
{
    static class Program
    {
        

        /// 
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// 
        [STAThread]
        static void Main()
        {
            bool flag = true;
            bool USE_WATCHDOG = true;

            Mutex watchDog;

            // 필요에 따라 중복실행 체크를 안할 수도 있으므로
            // 사용여부를 보고 중복체크 실행
            if (USE_WATCHDOG)
            {
                /* 프로세스 중복실행 체크를 위한 코드 시작 */                
                watchDog = new Mutex(true, "VMU_WATCHDOG", out flag);

                if (flag)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new mainForm());

                    watchDog.ReleaseMutex();
                }
                else
                {
                    MessageBox.Show("프로그램이 이미 실행 중 입니다.", "오류");
                }
                /* 중복체크를 위한 코드 끝 */
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new mainForm());
            }
        }
    }
}
 

이상 끝!

C#, 프로그램 실행 시 관리자 권한 상승

프로그램을 작성하다보면 유저 권한이 아닌 관리자 권한을 획득해야 하는 상황이 발생한다.

아래에 C#에서 관리자 권한 획득을 위한 코드를 적어본다.

아래 코드는 윈도우 폼 프로그램 작성 시에는 Program.cs 에서 수정을 하면 된다.

using System;
/* 실행 시 관리자 권한 상승을 위해 추가*/
using System.Security.Principal;
using System.Diagnostics;
/* 추가 끝 */

namespace adminTest
{
    static class Program
    {
        

        /// 
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// 
        [STAThread]
        static void Main()
        {

            /* 실행 시 관리자 권한 상승을 위한 코드 시작 */
            if (/* Main 아래에 정의된 함수 */IsAdministrator() == false)
            {
                try
                {
                    ProcessStartInfo procInfo = new ProcessStartInfo();
                    procInfo.UseShellExecute = true;
                    procInfo.FileName = Application.ExecutablePath;
                    procInfo.WorkingDirectory = Environment.CurrentDirectory;
                    procInfo.Verb = "runas";
                    Process.Start(procInfo);
                }
                catch (Exception ex)
                {
                    System.console.writeline(ex.Message.ToString());
                }

                return;
            }
            /* 실행 시 관리자 권한 상승을 위한 코드 끝 */
        }
        /* 실행 시 관리자 권한 상승을 위한 함수 시작 */
        public static bool IsAdministrator()
        {
            WindowsIdentity identity = WindowsIdentity.GetCurrent();

            if (null != identity)
            {
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                return principal.IsInRole(WindowsBuiltInRole.Administrator);
            }

            return false;
        }
        /* 실행 시 관리자 권한 상승을 위한 함수 끝 */
    }
}
 
위 코

netstat, tasklist, taskkill 명령어

1. 현재 사용하고 있는 포트 확인

> netstat -ao



2. 포트를 사용하는 프로세스 아이디 확인

> netstat -anb



3. PID(ex. 1111)로 프로그램 찾기

> tasklist /SVC /fi "PID eq 1111"



4. PID(ex. 1111)로 프로세스 죽이기

> taskkill /f /pid 1111

C#, cmd 명령어 창 안보이게 실행하기


C#으로 프로그램을 만들다보니 사용자 계정 컨트롤 박스가 뜨지 않도록 해야 하는 상황이 발생했다.
사용자 계정 컨트롤 박스가 뜨지 않도록 하는 방법을 찾아보니 아래의 cmd 명령어를 찾을 수 있었다.

윈도우7 사용자 계정 컨트롤 disable 명령어
> C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f

윈도우7 사용자 계정 컨트롤 enable 명령어
> C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 1 /f


명령어를 찾았으니 프로그램 실행 시 위 명령어를 실행하도록 해야한다.

다시 좀 찾아보니 외부 프로그램은 아래 같은 방식으로 실행하면 된다고 한다.
Process.Start("cmd.exe");




그런데 나는 cmd 명령어를 실행시켜야 한다.

다시 좀 더 찾아보니 아래 방식으로 하면 위의 명령어를 실행 시킬 수 있다.

string msg = "C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f";

                

ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe", msg);

Process process = new Process();

                

process.StartInfo = startInfo;

process.Start();

process.Close();







그런데!!! cmd 창이 사라지질 않는다. 이제는 cmd 창에서 명령어를 실행시키되, 실행 후 cmd 창을 닫아야 한다.! 다시 더 찾아본다. 결국 아래 코드로 완성.!!

string msg = "C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f";

                

ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe", msg);

Process process = new Process();

startInfo.WindowStyle = ProcessWindowStyle.Hidden;

startInfo.CreateNoWindow = true;

                

process.StartInfo = startInfo;

process.Start();

process.Close();


휴~