Foxtable(狐表)用户栏目专家坐堂 → 怎么实现在项目启动的时候就默认用管理员身份运行呢?


  共有3523人关注过本帖树形打印复制链接

主题:怎么实现在项目启动的时候就默认用管理员身份运行呢?

帅哥哟,离线,有人找我吗?
李孝春
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
怎么实现在项目启动的时候就默认用管理员身份运行呢?  发帖心情 Post By:2020/11/5 9:23:00 [显示全部帖子]

论坛有点蓝老师  提供了一个打开完毕程序,以管理员身份运行  
代码如下:
Dim p As new Process()
p.StartInfo.FileName = "c:\xxx.bat"
p.StartInfo.Verb = "runas"
p.StartInfo.WorkingDirectory = "c:\"
p.Start()

怎么实现在项目启动的时候就默认用管理员身份运行呢?

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)foxtable项目?在Windows的桌面上右击...  发帖心情 Post By:2020/11/5 9:36:00 [显示全部帖子]

有没有代码可以直接在运行项目时 就默认管理员启动呢?
前提是不在运行之前手动进行设置管理员权限启动项目

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)这是一个悖论。以管理员启动,就是启...  发帖心情 Post By:2020/11/5 10:26:00 [显示全部帖子]

有点蓝老师  主要是解决有时候忘记手动设置管理员权限运行的情况  项目发布后 不是每个用户都会注意这个细节



经过测试 将一下代码写入文件并另存为bat文件,以此启动项目,可以不用手动添加管理员权限即可运行狐表项目中的office相关、打开外部文件相关需要管理员权限运行的操作

@echo off
setlocal EnableDelayedExpansion
color 3e
title 添加服务配置
 
PUSHD %~DP0 & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas

start C:\Users\jcy\Documents\Foxtable项目\公文助手20201104\Publish\公文助手.exe

下面有两个问题
第一个  怎么确保这个bat静默运行,不需要显示bat运行时的窗口
第二个  红色部分相对路劲 怎么修改为项目文件动态路劲呢?也就是不管这个文件我放在任何目录下 都可以用这个批处理文件一键运行项目



 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)1、Dim Proc As New Process '定义一...  发帖心情 Post By:2020/11/5 13:13:00 [显示全部帖子]

有点蓝老师  再麻烦你一下   我把如下代码加入了项目启动前的事件里面   
项目会不断重启  重新再次打开项目文件   有没有办法将如下代码做一下修正  让项目启动时,只运行一次,运行一次之后 就不再运行了    下载重新打开项目时也依旧只运行一次


If FileSys.FileExists(projectpath & "112.bat") Then '如果指定的文件存在
    Dim Proc As New Process '定义一个新的Process
    Dim batPath As String  = projectpath & "112.bat" '指定要打开的bat文件
    Proc.StartInfo.WorkingDirectory = FileSys.GetParentPath(batPath)
    Proc.StartInfo.FileName = batPath
    Proc.StartInfo.CreateNoWindow = False
    Proc.Start()
Else
    FileSys.CopyFile(projectpath & "11.bat", projectpath & "112.bat",True)  
    Dim Proc As New Process '定义一个新的Process
    Dim batPath As String  = projectpath & "112.bat" '指定要打开的bat文件
    Proc.StartInfo.WorkingDirectory = FileSys.GetParentPath(batPath)
    Proc.StartInfo.FileName = batPath
    Proc.StartInfo.CreateNoWindow = False
    Proc.Start()
End If

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)原因看4楼。不用写代码执行了,把bat...  发帖心情 Post By:2020/11/5 13:56:00 [显示全部帖子]

有点蓝 老师  
直接双击bat文件 运行  对吧

直接点击是可以启动并且以超级管理员权限运行的

直接双击bat文件有些不友好  还麻烦老师看看有没有更加友好的方式进行操作呢?

Dim Proc As New Process '定义一个新的Process
Dim batPath As String  = projectpath & "112.bat" '指定要打开的bat文件
Proc.StartInfo.WorkingDirectory = FileSys.GetParentPath(batPath)
Proc.StartInfo.FileName = batPath
Proc.StartInfo.CreateNoWindow = False
Proc.Start()
这样的代码如果放在项目启动前事件代码里 会一直重复启动项目   就想只实现一次启动  启动成功了就不要再启动了
[此贴子已经被作者于2020/11/5 14:00:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)使用专业的打包软件打包程序,如:ht...  发帖心情 Post By:2020/11/5 14:03:00 [显示全部帖子]

这个打包工具刚刚我试过了  不能直接为bat文件进行创建快捷方式
只能就项目主体文件exe进行创建快捷方式
我明白了老师的意思  直接在安装包生成时就授权管理员权限进行使用  对吧

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)杀跌。使用打包工具就完全不需要bat文...  发帖心情 Post By:2020/11/5 14:27:00 [显示全部帖子]

有点蓝老师 经过实际生成项目文件  并且利用安装包制作软件授予管理员权限运行  结果还是不能实现office相关权限内容的使用

现附上bat文件  项目文件  麻烦老师指导下    谢谢!


以下内容是专门发给有点蓝浏览


 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)使用代码直接写注册表:http://www.f...  发帖心情 Post By:2020/11/5 16:06:00 [显示全部帖子]

有点蓝 老师  参照你提供的帮助 写入注册表方式

运用如下代码  项目会默认打开依旧没有获得管理员权限 怎么修正一下  项目默认打开 直接运行11.bat获得管理员权限并打开项目主体文件
经显示查看count不为零  项目没有运行bat文件
请教一下  在哪里可以写上当项目运行一次之后就默认把count清零   便于下一次启动时候  项目只运行一次bat文件

试了一下  命令窗口清零count
然后项目会自动连续运行两次   第一次打开的窗体是没有以管理员权限运行的   第二次打开的窗体是以管理员权限运行的   两个窗体都显示出来了
有没有办法只显示一个窗体  也就是项目只运行一次  并且是以管理员权限运行的

想实现的是:项目模拟点击或者直接运行11.bat文件一次  直接获得管理员权限运行项目文件


BeforeOpenProject事件代码如下:
Dim Count As Integer
Count = Registry.GetValue("HKEY_CURRENT_USER\Software\MyApp","Count",0)

If Count=0 Then
Registry.SetValue("HKEY_CURRENT_USER\Software\MyApp","Count",Count + 1)
    Dim Proc As New Process '定义一个新的Process
    Dim batPath As String  = projectpath & "11.bat" '指定要打开的bat文件
    Proc.StartInfo.WorkingDirectory = FileSys.GetParentPath(batPath)
    Proc.StartInfo.FileName = batPath
    Proc.StartInfo.CreateNoWindow = False
    Proc.Start()

End If

[此贴子已经被作者于2020/11/5 16:17:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)分析注册表文件Office.reg的内容,看...  发帖心情 Post By:2020/11/5 18:03:00 [显示全部帖子]

没有理解有点蓝老师的意思
把老师直接写注册表的意思理解为利用注册表来判断运行bat文件
按照老师这个做法  解决了office文件在窗体中显示
但是如果需要打开外部文件的话  还是一样会提示找不到文件  如果用管理员权限就可以打开
比如  我发给老师的项目文件中  注册office就是应用外部文件  在没有授权管理员权限运行的情况下就不能打开  授权后就可以打开

 回到顶部