Per impostazione predefinita in Windows Server 2003 è abilitata la Protezione avanzata di Internet Explorer ciò causa il seguente errore se provate ad avviare eseguibili, setup etc da una share di rete anche se sulla stessa avete tutti diritti necessari:
Impossibile accedere alla periferica, al percorso o al file specificato. E' probabile che non si disponga delle autorizzazioni necessarie.
Le possibili sluzioni sono:
- Aggiungere il o i server su cui risiedono le share nell'eleco dei siti Intranet Locale.
- Se l'utente appartiene ad un grupoo amministrativo disabilitare la Protezione avanzata di Internet Explorer per gruppi Amministrativi.
- Disinstallare la Protezione avanzata di Internet Explorer
E' possibile disinstallare la Protezione avanzata di Internet Explorer o modificarle le impostazioni tramite:
Panello di controllo -> Installazioni applicazioni -> Installazioni componenti di Windows -> Protezione avanzata di Internet Explorer
Per ulteriori informazioni si veda Diversa esplorazione con il browser in seguito all'impostazione della protezione avanzata di Internet Explorer e in particolare:
"La protezione avanzata di Internet Explorer impone delle limitazioni anche all'accesso a script, file eseguibili e altri file potenzialmente non sicuri su un percorso UNC, a meno che tale percorso non sia stato aggiunto esplicitamente all'area Intranet locale. Ad esempio, se si desidera accedere a \\server\share\setup.exe, sarà necessario aggiungere \\server all'area Intranet locale. "
Una delle impostazioni che possibile fare su un'istanza di SQL Server è quella del percorso di default in cui memorizzare file dati e logs di un nuovo database. Ho fatto diverse ricerca, ma non trovato un modo semplice per ricavare tramite T-SQL tali informazioni.
A quanto sembra se si modificano tali percorsi questi vengono memorizzati nelle chiavi di registry:
- HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData
- HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultLog
In caso contrario i path è quello specificato durante l'installazione per i File di dati quindi si può pensare di ricavarli dai path dei file mdf e ldf del database master.
Di seguito uno script T-SQL per ricavare il path di default per i file di dati:
USE master
declare @DefaultData nvarchar(512)
--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData',
@DefaultData OUTPUT, 'no_output'
--Se la chiave di registry non esiste si utilizza il path del file mdf del database master
IF (@DefaultData IS NULL)
BEGIN
SELECT @DefaultData = SUBSTRING(physical_name, 0, CHARINDEX(N'master.mdf', physical_name))
FROM sys.database_files
WHERE name='master'
END
--Rimozione eventuale slash finale
IF ((@DefaultData IS NOT NULL) AND (CHARINDEX(N'\', @DefaultData, len(@DefaultData)) > 0))
BEGIN
SELECT @DefaultData = STUFF (@DefaultData,len(@DefaultData),1,N'')
END
SELECT @DefaultData
Mentre questo è lo script per ricavare il path di default per i file di log:
USE master
declare @DefaultLog nvarchar(512)
--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultLog
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog',
@DefaultLog OUTPUT, 'no_output'
--Se la chiave di registry non esiste si utilizza il path
--del file mdf del database master
IF (@DefaultLog IS NULL)
BEGIN
SELECT @DefaultLog = SUBSTRING(physical_name, 0, CHARINDEX(N'mastlog.ldf', physical_name))
FROM sys.database_files
WHERE name='mastlog'
END
--Rimozione eventuale slash finale
IF ((@DefaultLog IS NOT NULL) AND (CHARINDEX(N'\', @DefaultLog, len(@DefaultLog)) > 0))
BEGIN
SELECT @DefaultLog = STUFF (@DefaultLog,len(@DefaultLog),1,N'')
END
SELECT @DefaultLog
Se poi occorre usare questi script in un programma .NET il mio consiglio è quello di non inserire lo script nel codice, ma di creare dei file con estensione sql in questo modo Visual Studio visualizzerà lo script evidenziando le parole chiave esattamente come in Management Studio. Quindi aggiungere il file come risorsa in questo modo VS 2005 e sucessivi creeranno una comoda prorietà stringa in My.Resources che conterrà il testo del file. In VS 2003 è possibile impostare il file come Embedded e tramite un po' di codice leggere il contenuto del file:
Dim text As String = String.Empty
Dim resource As System.IO.Stream = _
System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream( _
"NameSpace.FileName")
Dim reader As New System.IO.StreamReader(resource)
text = reader.ReadToEnd()
reader.Close() : reader = Nothing
resource.Close() : resource = Nothing