在用于为我的软件构建互联网软件更新服务的Delphi应用程序中,Windows 7 UAC系统请求用户授权运行exe.代码中存在以下可能存在争议/风险的区域:
在添加UAC未激活的这些项目之前,依次删除每个单元引用,然后以裸骨骼exe结束仍然会导致UAC事件 - 因此无法说明导致它的原因.除此之外,Delphi 2007现在需要以管理员身份启动,以启动应用程序的调试过程.
问题1:除了在新的exe中从头开始之外,我怎样才能看到导致这种情况的原因-IOW是否有一个我可以查看的日志
问题2:使用authenticode使用签名的exe仍然会导致显示UAC警报
我正在尝试以编程方式从C#(.net 4.0)编写的帮助应用程序中重新启动服务但是如果我通过双击同时右键单击并执行"以管理员身份运行"的方式运行EXE,则会出现权限违规.
但为什么我需要这个用户是本地管理员?!
我希望应用程序正常运行,并且只有在用户单击按钮重新启动服务时才请求管理员权限.可以这样做吗?
解决方案需要在xp,vista和windows 7上运行.
我正在使用http://www.csharp-examples.net/restart-windows-service/中的代码
public static void RestartService(string serviceName, int timeoutMilliseconds)
{
ServiceController service = new ServiceController(serviceName);
try
{
int millisec1 = Environment.TickCount;
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
// count the rest of the timeout
int millisec2 = Environment.TickCount;
timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2-millisec1));
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud) 所以我们有一个作为Windows服务运行的java进程.它需要执行命令Runtime.getRuntime().exec(command)
.它执行的命令需要UAC.这是在Windows Server 2008上,听起来你无法为单个可执行文件禁用UAC,那么有没有其他方法可以使这个工作?
我创建了一个winform应用程序,然后创建了该应用程序的设置.此应用程序在Application.StartupPath中记录文件中的一些信息.不幸的是,当我尝试写入"访问被拒绝"文件时,我遇到了异常.请指导我如何摆脱它..
谢谢
我很高兴在XP机器上使用log4net和我的WPF程序,并愉快地使用fileAppender FileAppender将日志消息写入c:\ log.txt.一切都好.但是,它不适用于Windows 7计算机.没有错误或任何东西,只是文件没有创建,更少记录.一个小小的研究表明它是Windows 7的文件权限问题(UAC),事实上,如果我以管理员身份运行可执行文件,它就可以工作.如果我只是点击它(即使我以管理员身份登录)它也不起作用,当我从Visual Studio启动时它不起作用.
问题:1.有人能指出一个例子,我要求允许写入一个且只有一个文件(C:\ log.txt).我已经看到一些示例,其中app.config配置为要求整个程序以管理员权限运行.这似乎有点矫枉过正,但我想它会起作用.2.有没有更好的方法将信息发送到日志文件?毕竟,也许C:在用户机器上不存在.我想我记得在Windows 7中使用"用户分区"的想法,但无论我做什么都必须在XP和Vista上工作.
谢谢你,戴夫
我正在为我的应用程序开发一个Autoupdater.(结合安装程序,更新程序和删除工具)
我想自动设置所有Stuff:
这非常有效.要写入Program Files和注册表,该工具需要管理员权限ofc.因此,在选择了所需的软件后,我添加了AppLauncher的"重启".就像这样:
ProcessStartInfo pi = new ProcessStartInfo(Directory.GetCurrentDirectory() + @"\AppLauncher.exe");
pi.Verb = "runas";
pi.Arguments = "install " + this.appItem.APID;
Process p = new Process();
p.StartInfo = pi;
try
{
p.Start();
Application application = Application.Current;
application.Shutdown();
}
catch (Exception ex)
{
MessageBox.Show("Unable to install the application.\n\n" + ex.ToString(), "Error",
application.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)
如果用户将AppLauncher.exe保存在文件夹中的某个位置并通过双击启动它,此步骤也可以正常工作.
如果用户决定从浏览器点击"运行",安装程序将运行到显示的异常,说"找不到"AppLauncher.exe.我假设,从浏览器启动文件将设置不同的WorkingDirectory,因此
Directory.GetCurrentDirectory()
Run Code Online (Sandbox Code Playgroud)
将不会返回文件所在的适当值.如果用户决定给该文件另一个名称,它也可能不起作用.
那么,我能做些什么呢?
有没有像File.GetCurrentFile():P
我编写了一个脚本,只需运行批处理文件即可在通过Wi-Fi或有线Internet连接计算机之间切换.我这样写是因为我不想每次输入我的用户名和密码来切换两者.
注意:我必须启用UAC,所以不幸的是只关闭它不是一个选项.
它会查看无线适配器的状态.如果当前已启用,它将关闭无线适配器并启用有线适配器.如果未启用无线,则将启用并禁用有线.这是代码.
$adapter = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Where-Object {$_.ServiceName -ne "hamachi"}
function wirelessOn
{
$wireless = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*Wireless*"}
$wireless.Disable()
$wired = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*gigabit*"}
$wired.Enable()
}
function wirelessOff
{
$wired = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*gigabit*"}
$wired.Disable()
$wireless = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*Wireless*"}
$wireless.Enable()
}
switch -wildcard ($adapter.description){
"*wireless*" {
wirelessOn
}
"*gigabit*" {
wirelessOff
} …
Run Code Online (Sandbox Code Playgroud) 1)如果我打开一个新的vb6标准exe项目,并且不添加任何代码,只是
2)立即编译到桌面并给它一个包含"更新"一词的名称,它有一个覆盖它的UAC屏蔽.
如果我运行它,我会得到UAC对话框.
除了我的Windows Vista家庭基本计算机上的microsoft essentials,我没有防病毒软件.
如果名称中没有更新(即使只是省略字母'e'),程序对话框中没有UAC也没有屏蔽.
我想这在我的计算机上只是一个奇怪的事情,还是有一个触发UAC的单词列表?
因此,我花了大部分时间来摆弄MANIFESTUAC
VS2008 的Qt 4.8.5处理.我最终通过避免特殊(读取:损坏)处理来修复它msvc_objectmodel.cpp
.我会发布我的解决方案作为答案,但我想知道是否有其他人遇到过此问题(并有一个更好的解决方案).
当我尝试设置/打开注册表项时,我得到了异常:
Requested registry access is not allowed.
Run Code Online (Sandbox Code Playgroud)
我可以设置requestedExecutionLevel
密钥requireAdministrator
,但我不希望每次,当应用程序启动时看到管理员提示.有些用户没有管理员权限.它非常适合按需请求管理员权限.
代码我已经尝试过:
Dim regStartUp As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
Dim value As String
value = regStartUp.GetValue("App")
If value <> Application.ExecutablePath.ToString() & " startup" Then
regStartUp.CreateSubKey("App")
regStartUp.SetValue("App", Application.ExecutablePath.ToString() & " startup")
End If
Dim CommandLineArguments As String() = Environment.GetCommandLineArgs()
Dim i As Integer
Dim hideme As Boolean = False
For i = 0 To CommandLineArguments.GetUpperBound(0)
Console.WriteLine(CommandLineArguments(i) & vbCrLf)
If CommandLineArguments(i).ToLower() = "startup" Then
hideme = True
End If
Next
If …
Run Code Online (Sandbox Code Playgroud)