Cmd立刻关机命令:ShellExecute中的 cmd命令

我正在尝试从elevated(has admin privileage) c++ application执行command prompt中的netsh winsock reset catalog命令。

HINSTANCE retVal = ShellExecute(NULL, "open", "cmd", "\c netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL); 

它只是打开命令提示符,没有其他事情发生。我试过

HINSTANCE retVal = ShellExecute(NULL, "runas", "cmd", "\c netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL); 

HINSTANCE retVal = ShellExecute(NULL, "open", "cmd", " netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL); 
2

开关字符导致问题。当开关字符从\c更改为/c时,它起作用。

Form

HINSTANCE retVal = ShellExecute(NULL, "open", "cmd", "\c netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL);

HINSTANCE retVal = ShellExecute(NULL, "open", "cmd", "/c netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL);
1

花了一些试验和错误找到最佳的方式,所以我想分享my solution。抛开我的 recomendation 使用异步调用,这里是我的 DoRun()函数:

BOOL DoRun(WCHAR *command)
{
    BOOL Result = FALSE;
    DWORD retSize;
    LPTSTR pTemp = NULL;
    TCHAR Command[BUFSIZE] = L"";
    if (!(DeleteFile(RESULTS_FILE)))
    {
        //return L"Can't delete previous results";
    }
    _tcscpy_s(Command, L"/C ");
    _tc_s(Command, command);
    _tc_s(Command, L" >");
    _tc_s(Command, RESULTS_FILE);
    wprintf(L"Calling:\n%s\n", Command);
    Result = (BOOL) ShellExecute(GetActiveWindow(), L"OPEN", L"cmd", Command, NULL, 0L);
    if(!Result)
    {
        retSize = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_ARGUMENT_ARRAY,
            NULL,
            GetLastError(),
            LANG_NEUTRAL,
            (LPTSTR)&pTemp,
            0,
            NULL);
        MessageBox(NULL,pTemp,L"Error",MB_OK);
    }
    return Result;
}
-1
func runElevated(interName, stateName string, isAdmin bool) {
    /*
        禁用无线网卡:netsh intece set intece WLAN disabled
        启用无线网卡:netsh intece set intece WLAN enabled
        禁用有线网卡:netsh intece set intece 以太网 disabled
        启用有线网卡:netsh intece set intece 以太网 enabled
    */
    var verb string
    if isAdmin {
        verb = "open"
    } else {
        verb = "runas"
    }
    exe := "C:\\Windows\\system32\\cmd.exe" // or "cmd"
    cwd, _ := os.Getwd()
    var cmdList = make([]string, 0)
    var cmdMap = map[string]string{"WLAN": "以太网", "enable": "disable", "以太网": "WLAN", "disable": "enable"}
    cmdList = append(cmdList, fmt.Sprintf("/c netsh intece set intece %s %s", interName, stateName))
    cmdList = append(cmdList, fmt.Sprintf("/c netsh intece set intece %s %s", cmdMap[interName], cmdMap[stateName]))
    verbPtr, _ := syscall.UTF16PtrFromString(verb)
    exePtr, _ := syscall.UTF16PtrFromString(exe)
    cwdPtr, _ := syscall.UTF16PtrFromString(cwd)
    for _, k := range cmdList {
        argPtr, _ := syscall.UTF16PtrFromString(k)
        err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, windows.SW_HIDE)
        if err != nil {
            log.Fatalf("execute error, detail %s", err)
        }
    }
    log.Fatal("execute success...")
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(981)
光速c等于多少:一个空间等于多少像素 (pxls.space)
上一篇
犬的正常体温是多少°c:C中枚举的大小是多少 (eum-a1 manual)
下一篇

相关推荐

  • comeandgetyourlove音乐爱就在你身边

    Come and Get Your Love是一首热门的歌曲,由美国摇滚乐队Redbone演唱。这首歌曲于1974年发行,被收录在他们的专辑《Wovoka》中。歌曲以放克曲风为主,旋律活泼,曲调悠扬,歌词朗朗上口,深受歌迷喜爱。…

    2023-06-29 07:47:31
    0 88 27
  • codeblocks无法编译运行:Codeblocks无法编译运行的解决方案

    codeblocks无法编译运行的原因可能有很多,下面以一段简单的C语言代码为例,来说明codeblocks无法编译运行的情况。…

    2023-07-11 08:01:55
    0 34 47
  • gitlab ci 自动化部署:使用 Gitlab CI 自动化部署提升开发效率

    GitLab CI 自动化部署是一种基于 GitLab CI/CD 的自动化部署方案,可以实现快速、可靠的部署流程。它将代码提交、构建、测试、部署等步骤集成在一起,使得开发者可以更加轻松地完成部署工作。下面是一个示例 .gitlab-ci.yml 文件,可以帮助你实现 GitLab CI 自动化部署:…

    2023-05-20 05:45:38
    0 56 61
  • xl和xe汽车cvt:探索XL和XE汽车的CVT技术优势

    XL和XE汽车CVT是一种变速器,它使用液力变矩器代替传统的机械变速器,以达到更高的效率。它的工作原理是,当发动机输出功率时,液力变矩器就会将这些功率转换为液压能量,然后将能量传递到变速器的输出轴上,从而实现变速。…

    2023-05-16 07:36:03
    0 43 32
  • js添加css:This is a Title

    使用js添加css可以通过修改元素的style属性来实现,具体代码如下:…

    2023-05-27 12:30:24
    0 81 77
  • css 字符间距:### 世界上最美的地方

    示例示例CSS 字符间距是指在文本中的字符之间添加间距,以增强文本的可读性。它可以使文本更容易阅读,也可以使文本看起来更美观。代码示例:…

    2023-04-15 08:45:29
    0 18 14
  • git 删除commit记录:回滚Git Commit记录

    git删除commit记录可以使用git reset命令。使用方法:…

    2023-07-07 04:31:44
    0 35 67
  • java实现tcp:使用Java实现TCP网络编程

    TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它使用三次握手来建立可靠的连接,并且在数据传输期间可以检测丢失的数据包并重新发送。…

    2023-01-31 10:33:14
    0 68 48

发表评论

登录 后才能评论

评论列表(25条)