2011-10-22 81 views
1

我通过代码更换壁纸时出现问题,因为每个SO/Codeproject线程都会在更改壁纸时谈论下面的代码。 (有没有其他运OS测试至今)在Windows 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); 

实际的问题,我在这里的是,如果我上面的代码为Windows服务,并安装为“本地服务”或“本地系统”,它根本不会工作。但是,如果我将上面的代码作为ConsoleApp使用,那么事情就会起作用。

我想知道最新的问题?是的,我的用户帐户具有管理权限。我也有Windows 7 Ultimate在这里。

感谢:)

回答

3

服务在自己的会话中运行,自Vista以来称为会话0。它出于安全原因与用户会话隔离,服务以非常特权的帐户运行。您正在更改那个不可见会话的桌面。

您不能使用服务。

+0

将服务作为用户类型而不是本地系统或本地服务来解决问题?虽然我尝试过,但每次我尝试安装它时,都会询问用户名和密码。虽然我尝试提供我的登录会话凭据,它不会采取。不知道该怎么做。 – Zenwalker

+1

与用户帐号无关,会话被隔离。同样,你不能使用服务。谷歌“会话0隔离”为背景信息。当没有人登录时,您也不需要服务,也不需要更改桌面位图。将快捷方式放到用户的Startup文件夹中。 –

+0

嗯。奥基应该做的,谢谢:) – Zenwalker