首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows7中为当前用户在Windows服务中执行InternetSetOptionW

在Windows7中为当前用户在Windows服务中执行InternetSetOptionW
EN

Stack Overflow用户
提问于 2021-06-22 18:31:08
回答 1查看 32关注 0票数 0

我有一个运行在windows7机器上的windows服务。此服务几乎不会更改当前用户的系统注册表中的代理设置。但是,与windows10不同的是,windows7不会检测到当前用户在注册表中所做的更改。因此,我需要告诉系统刷新互联网设置,并意识到我的windows服务的变化。我使用wininet.dll中的internetsetoptionw来执行此操作,并使用标志37、39调用它。我用golang写了一个简单的程序:

代码语言:javascript
复制
 package main

import (
    "fmt"
    "unsafe"
    "golang.org/x/sys/windows"
)

var wininet *windows.LazyDLL = windows.NewLazySystemDLL("Wininet")
func main(){
fmt.Println("main function")
refereshSystem()
}
// internetSetOptionW is imported from wininet.h
func internetSetOptionW(hndl uintptr, opt uintptr, val []byte, valLen int) error {
    var e error
    var success uintptr

    // Pointer to data if provided
    if valLen == 0 {
        val = make([]byte, 1)
    }

    success, _, e = wininet.NewProc("InternetSetOptionW").Call(hndl, opt, uintptr(unsafe.Pointer(&val[0])), uintptr(valLen))
    if success == 0 {
        fmt.Println("InternetSetOptionW:", e.Error())
        return fmt.Errorf("InternetSetOptionW: %s", e.Error())
    }

    return nil
}

func refereshSystem() {

        null := uintptr(0)
        var nillbyte []byte
        internetSetOptionW(null, uintptr(39), nillbyte, 0)
        internetSetOptionW(null, uintptr(37), nillbyte, 0)
        fmt.Println("")

}

当我在更改代理设置后从CMD运行此程序时,它会更新系统,并且系统会意识到我对代理相关注册表所做的更改。但是,当我在我的windows服务中运行它时,它不工作。windows服务正在以系统根权限运行。有没有办法从我的windows服务中为当前用户执行internetSetOptionw函数?

EN

回答 1

Stack Overflow用户

发布于 2021-06-25 12:38:06

windows上的服务可以使用当前用户权限运行另一段代码(作为单独的进程)。这个git repo已经展示了这一点。我创建了上面发布的go程序的二进制文件,并用git代码中提到的notepate.exe替换了它的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68081926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档