PERMISSAO DE ADMINISTRADOR
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.
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.
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
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
E nem vai dar certo, é uma restrição do windows, você não pode sobrepô-la
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 !
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 !
Funcionou ?
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