2011-10-22 2 views
1

코드를 통해 벽지를 변경하는 데 문제가 있습니다. 모든 SO/Codeproject 스레드가 변화하는 벽지에 대해 이야기 할 때마다 아래 코드가 있습니다.벽지가 윈도우 7에서 변경됨

const int SPI_SETDESKWALLPAPER = 20; 
    const int SPIF_UPDATEINIFILE = 0x01; 
    const int SPIF_SENDWININICHANGE = 0x02; 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    static extern int SystemParametersInfo(
     int uAction, int uParam, string lpvParam, int fuWinIni); 

    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @"C:\Temp\100_5715.JPG.bmp", 
      SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); 

내가 여기있는 실제 문제가 (지금까지 다른 승리 OS에서 테스트하지 않은 경우) 그 내가 Windows 서비스로 위의 코드를 확인하고 "로컬 서비스"또는 "로컬 시스템"으로 설치하는 경우, 그것은 전혀 작동하지 않습니다. 하지만 위의 코드를 ConsoleApp로 만들면 모든 것이 작동합니다.

내가 무슨 문제인지 궁금한가요? 예, 내 사용자 계정에 관리자 권한이 있습니다. 또한 여기에 Windows 7 Ultimate가 있습니다.

고마워요 :)

답변

3

서비스는 Vista 이후 세션 0이라는 자체 세션에서 실행됩니다. 보안상의 이유로 사용자 세션과 분리되어 매우 권한있는 계정으로 실행되는 서비스입니다. 그렇지 않으면 보이지 않는 세션의 바탕 화면을 변경하고 있습니다.

서비스를 사용할 수 없습니다.

+0

로컬 시스템 또는 로컬 서비스 대신 사용자 유형으로 서비스를 설정하면 문제가 해결됩니까? 내가 그것을 만들려고했지만, 내가 그것을 설치하려고 할 때마다, 그것은 사용자 이름과 비밀 번호를 묻습니다. 내 로그인 세션 자격 증명을 제공하려고 시도하지만, 받아 들여지지는 않습니다. 무엇을 해야할지 모르겠다. – Zenwalker

+1

사용자 계정과 아무런 관련이 없습니다. 세션은 격리되어 있습니다. 다시 한 번 서비스를 사용할 수 없습니다. 배경 정보에 대한 Google "세션 0 격리". 아무도 로그인하지 않았을 때 서비스도 필요하지 않으며 데스크탑 비트 맵을 변경하지 않습니다. 프로그램의 바로 가기를 사용자의 Startup 폴더에 넣으십시오. –

+0

흠. 감사합니다, 감사합니다 :) – Zenwalker

관련 문제