PERMISSAO DE ADMINISTRADOR

MALA 26/04/2012 16:59:47
#400863
TENHO UM FUNÇÃO QUE EXECUTADA COM USUARIO DO WINDOWS COM DIREITO DE ADMINISTRADOR ELA FUNCIONA MAS COM UM USUARIO NORMAL NAO FUNCIONA, ESSA FUNCAO COMPARTILHA UM IMPRESSORA

Dim s As New ManagementScope([Ô]\\[Ô] & Environment.MachineName & [Ô]oot\cimv2[Ô])
Dim mc As New ManagementClass([Ô]Win32_Printer[Ô])
mc.Scope = s
Dim impressoras As ManagementObjectCollection = mc.GetInstances()
For Each impressora As ManagementObject In impressoras
If impressora([Ô]Name[Ô]).ToString() = NomeImpressora Then
Dim param As String = [Ô]printui.dll, PrintUIEntry /q /Xs /n [Ô] & _
Chr(34) & impressora([Ô]Name[Ô]).ToString() & _
Chr(34) & [Ô] sharename [Ô] & _
Chr(34) & NomeCompartilhamento & _
Chr(34) & [Ô] attributes +Shared[Ô]

System.Diagnostics.Process.Start([Ô]rundll32[Ô], param)
End If
Next

ACIMA E A FUNÇÃO, GOSTARIA DE AJUDA PRA EXECUTAR ESTA FUNÇÃO COM UM USUARIO QUE TEM DIREITO DE ADMINISTRADOR.


DESDE JA AGRADEÇO A ATENÇÃO DE VCS.
MALA 26/04/2012 17:02:56
#400864
Dim s As New ManagementScope([Ô]\\[Ô] & Environment.MachineName & [Ô]oot\cimv2[Ô])
Dim mc As New ManagementClass([Ô]Win32_Printer[Ô])
Dim ImpInst As String = [Ô][Ô]

mc.Scope = s

Dim impressoras As ManagementObjectCollection = mc.GetInstances()
For Each impressora As ManagementObject In impressoras
ImpInst = impressora([Ô]Name[Ô]).ToString().Substring(1, 6)

If ImpInst.ToLower = NomeImpressora.Substring(1, 6).ToLower Then
Dim param As String = [Ô]printui.dll, PrintUIEntry /q /Xs /n [Ô] & Chr(34) & NomeImpressora & Chr(34) & [Ô] sharename [Ô] & Chr(34) & NomeCompartilhamento & Chr(34) & [Ô] attributes +Shared[Ô]
Dim startInfo As New ProcessStartInfo
Dim password As New Security.SecureString()
Dim Senha As String = [Ô]ahd4245lu[Ô]
Dim c As Char
For Each c In Senha.ToCharArray
password.AppendChar(c)
Next c

startInfo.UseShellExecute = False
startInfo.FileName = [Ô]rundll32[Ô]
startInfo.Arguments = param
startInfo.Domain = [Ô]rubi[Ô]
startInfo.UserName = [Ô]clseio[Ô]
startInfo.Password = password

Process.Start(startInfo)
Exit For
End If
Next

JA TENTEI ASSIM TB E NAO DEU CERTO
KERPLUNK 26/04/2012 19:27:18
#400876
E nem vai dar certo, é uma restrição do windows, você não pode sobrepô-la
ALEVALE 27/04/2012 09:01:11
#400886
KerpLunk acho que o problema é que essa função realmente precisa de acesso administrador mas o que dá para fazer é liberar acesso ao objeto responsavel pela execução no servidor.

Dá pra fazer isso não se se vai funcionar (Painel de Controle->Ferramentas Administrativas->Serviço de componente->Config.Dcom.
Aqui é o problema você terá que saber qual é o objeto responsável por executar isso no servidor, procure algo como WMI e dê permissão de acesso remoto para todos os usuários ou melhor ainda, usuário autenticados.


Tente o código abaixo também, claro estude os parametros disponiveis.

Dim oWMI_Scope As New ManagementScope
oWMI_Scope.Options.Authentication = AuthenticationLevel.Default
oWMI_Scope.Options.Impersonation = ImpersonationLevel.Impersonate
oWMI_Scope.Options.EnablePrivileges = True

Talvez funcione, se funcionar posta o objeto ou o código que funcionou !
ALEVALE 04/05/2012 11:02:44
#401364
Funcionou ?
MALA 07/05/2012 17:07:48
#401506
AINDA NAO ACHEI UM EXEMPLO NA NET, MAS AINDA NAO TESTEI, ASSIM QUE EU TESTAR EU POSTO O CODIGO SE DER CERTO
Tópico encerrado , respostas não são mais permitidas