在C# Windows服务程序里,怎么用shell 执行net use命令。

SST_X 2020-04-13 10:41:56
VB.NET写的可以。C#该怎么用?

Shared Function checkPathExists(ByVal PathStr As String) As Boolean
Dim s As String = "cmd.exe /c net use " + NetUsePath + " " + Chr(34) + PWD + Chr(34) + " /user:" + Chr(34) + userName + Chr(34)
My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\logfile" & "\ttt.txt", Strings.Format(Now, "yyyy/MM/dd HH:mm:ss") & " " & s, True, System.Text.Encoding.GetEncoding("GB2312"))

Shell(s, 1)
Thread.Sleep(500)
If System.IO.Directory.Exists(PathStr) = False Then
checkPathExists = False
Else
checkPathExists = True
End If
End Function


C#代码,执行无效,一直返回false

private bool NetUse()
{
Process process = new Process();
//设定程序名
process.StartInfo.FileName = "cmd.exe";

//关闭Shell的使用
process.StartInfo.UseShellExecute = false;
////重新定向标准输入,输入,错误输出
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;

//设置cmd窗口不显示
process.StartInfo.CreateNoWindow = false;
//开始
process.Start();
//输入命令,退出
string cmd = @"net use " + ClassConfig.netPath + " " + ClassConfig.pwd + " /user:admin";
process.StandardInput.WriteLine(cmd);
//net use \\plant1-test\shared "plant1" /user:"asia\user"
//net use \\192.168.0.4 admin1234 /user:admin

process.StandardInput.WriteLine("exit");
System.Threading.Thread.Sleep(1000);
if (Directory.Exists(ClassConfig.netPath) == false)
{
System.IO.File.AppendAllText(Application.StartupPath + "\\ErrNETUSE.txt", Directory.Exists(ClassConfig.netPath) + "\n");
return false;
}
else
{
System.IO.File.AppendAllText(Application.StartupPath + "\\ErrNETUSE.txt", Directory.Exists(ClassConfig.netPath) + "\n");
return true;
}
}
...全文
282 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SST_X 2020-04-13
  • 打赏
  • 举报
回复
好的,谢谢你。这么晚还帮忙回复。明天我谢想想办法,看看怎么弄。再次感谢
wanghui0380 2020-04-13
  • 打赏
  • 举报
回复
微软其实官方建议是写启动计划任务
比如下面这样
https://wenku.baidu.com/view/aeaea00190c69ec3d5bb7512

但是计划任务,容易被用户自己删了,所以我们也不太常用
wanghui0380 2020-04-13
  • 打赏
  • 举报
回复
如果你觉着session0提权代码你不好拿,可以简单处理。

直接用bat批处理或者powshell写,或者就是标准控制台写,写好后放到启动项里

或者使用计划任务创建后台计划任务。
wanghui0380 2020-04-13
  • 打赏
  • 举报
回复
没办法,我们也不知道微软在vista以后是怎么想的,在vista之前你的代码只需要简单勾选允许交互就ok 但是vista之后出来一个session0态,即使勾选也无效,但是又留这么个提权手段,让你可以做。实在是没话说
SST_X 2020-04-13
  • 打赏
  • 举报
回复
太高深了。
我这要net use一下网盘,并且还要在网盘上建立文件夹,创建文件。
这下搞不出来了。
wanghui0380 2020-04-13
  • 打赏
  • 举报
回复
https://stackoverflow.com/questions/281951/net-use-command-in-a-windows-service 这里有解释,为啥你不提权,无法使用的原因
SST_X 2020-04-13
  • 打赏
  • 举报
回复
谢谢你,这么快回我。我学一下你发的连接。有问题还要继续请教你,感谢!
wanghui0380 2020-04-13
  • 打赏
  • 举报
回复
不想翻代码,你自己百度“window service session0 提权” https://www.baidu.com/s?wd=window%20service%20session0%20%E6%8F%90%E6%9D%83&rsv_spt=1&rsv_iqid=0x8aaefba600045580&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=ib&rsv_n=2&rsv_sug3=1
SST_X 2020-04-13
  • 打赏
  • 举报
回复
非常着急!还请大家帮忙测试一下。是service服务程序。拜谢!

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧