Re: Mapping of network drives
On Jul 25, 11:52 am, sriram bala <sriramga...@gmail.com> wrote:
On Jul 24, 5:31 pm, Joseph M. Newcomer <newco...@flounder.com> wrote:
See at end...
On Mon, 23 Jul 2007 23:16:33 -0700, sriram bala <sriramga...@gmail.com>=
wrote:
On Jul 23, 9:11 pm, Joseph M. Newcomer <newco...@flounder.com> wrote:
Are you mapping a network drive or creating a folder?
Is this being done in a service or in an application (the SvcDebugOu=
t suggests it is a
service). Note that logical devices apply only to a particular logi=
n session, and since a
service is not generally logged in as a user, it would not have the =
session profile of the
logged-in user. Also, I don't know if a non-interactive login will =
load profiles tht
include mapped drives, even if the interactive login account has the=
drive mapped.
Please clarify the context in which this code is executing and what =
you are trying to
accomplish.
joe
On Mon, 23 Jul 2007 02:08:46 -0700, sriram bala <sriramga...@gmail.c=
om> wrote:
hey guys, i tried to map a network drive which is in a remote
computer.i have done verything so that it can be done..how do i cre=
ate
a folder in a remote computer programatically i vc++.i tried this
function but this works only for local folder creation...
BOOL PrepareFolder(CString& Folder)
{
int iLength;
Folder.TrimLeft();
Folder.TrimRight();
if (!Folder.IsEmpty())
{
iLength = Folder.GetLength();
if (Folder[iLength - 1] != '\\' && Folder[iLength - 1=
] != '/')
{
Folder += '\\';
}
}
SvcDebugOut(Folder);
if (::GetFileAttributes(Folder) == INVALID_FILE_ATTRIBUTES)=
//
****
DWORD err = ::GetLastError();
****>> > SvcDebugOut(_T("INVALID_FILE_ATTRIBUTES"));
****
SvcDebugOut(ErrorString(err));
You can download the ErrorString function from my MVP Tips site from my=
essay on using
FormatMessage in MFC. Or you can just do
CString s;
s.Format(_T("%d (%08x)"), err, err);
SvcDebugOut(s);
It's really important to see the precise error code, not just the fact =
that there is an
error. If you are not using MFC, you can see from my code how to use F=
ormatMessage (I
just wrap it in a CString-returning function).
****>> > if (!::CreateDirectory(Folder, NULL)) // Failed to =
create the
****
DWORD err = ::GetLastError();
...etc.
****
SvcDebugOut(_T("Cannot Create Direcotry"));
return FALSE;
}
return TRUE;
}
return TRUE;
}
can anyone temme how to create a folder programmatically because i
want save my files there in thet remote folder in that computer....=
pls
guys help me out....its very urgent!!!!
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm-Hidequoted text -
- Show quoted text -
hi thanks for replying mate...look i am using a windows service.i am
able to map a remote computer using my vc++ code using logon and
impersonating logon functions but the thing is that in that folder
which i am mapping i should create a folder inside that mapped
folder..for ur clarifications this is the llog which i have
written....
07/24/2007 11:42:16 *** \\192.168.1.19\DcmImg
07/24/2007 11:42:16 *** MapNetworkDrive : WNetAddConnection2 Sucess
07/24/2007 11:42:16 *** \\192.168.1.19\DcmImg
07/24/2007 11:42:16 *** MapNetworkDrive : WNetAddConnection2 Sucess
07/24/2007 11:42:16 *** \\192.168.1.19\DcmImg
07/24/2007 11:42:16 *** MapNetworkDrive : WNetAddConnection2 Sucess
07/24/2007 11:42:16 *** Application Folder :E:\EchoService\Debug\
07/24/2007 11:42:16 *** B:\07/24/2007 11:42:16 ***
INVALID_FILE_ATTRIBUTES07/24/2007 11:42:16 *** Cannot Create
Direcotry07/24/2007 11:42:16 *** C:\MatrixViewData\Temp\07/24/2007
*****
Note that you cannot put / in a file name! This may be the problem! T=
his requires that
under temp there is a subdirectory 07, and it has a subdirectory 24, an=
d under that you
can create a file called 2007.
The following characters are illegal in a path element component
\ / indicate directories
| < > piping symbols
: used for drive designation
* ? wildcard symbols
" used to enclose file names that have internal spaces
So if you want a file named with a date, you need to eliminate the inte=
rnal / characters.
Also, you may find it easier to use the names if they have a format like
2007-11-30
that is, year, month, day, which makes it easier to find files by both =
name and date
*****
11:42:16 *** C:\MatrixViewData\Log\07/24/2007 11:42:16 *** C:
\MatrixViewData\Backup\07/24/2007 11:42:16 *** C:\MatrixViewData\Cache
\07/24/2007 11:42:16 **
look above that i am able to map the directory but not able to create
folders inside that which is what i want buddy.....can u pls help me
out on this???? thanks in adavnce.....
*****
What was the actual error code? Folder not found or access denied? Th=
ere are many
reasons you might get an error, and looking at the return just as indic=
ating an error is
not sufficient to isolate the cause. Use ::GetLastError to get the act=
ual error code, as
shown above.
I see you are mapping the drive yourself, so that eliminates the issue =
about interactive
vs. non-interactive sessions. I would also suggest logging some detail=
s of the calls, or
showing the actual code that does the mapping, because when we see C:\ =
as a drive name, it
raises issues about whether this is a local drive or mapped drive, but =
you didn't actually
show that you were mapping "C" as a drive name. I presume that this is=
one of the drive
letters you mapped.
But if the error is "access denied" then you are having some issue abou=
t the rights.
Unfortunately, I'm not very knowledgeable about the details of all the =
Windows security
mechanisms (I know them at a fairly high level, but not the APIs or iss=
ues of
impersonation) but with a precise description of the problem, there are=
people in the
newsgroup who do know the answers to security questions and they might =
be able to help
better than I can.
Unless the filename issue I pointed out above is the cause (I just went=
back and read the
log more carefully, after I wrote the above paragraph).
joe
*****
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm-Hide quoted text -
- Show quoted text -- Hide quoted text -
- Show quoted text -
BOOL MapNetworkDrive(CString sDriveLetter, CString sUserName, CString
sPassword, CString sRemotePath)
{
TCHAR szDriveLetter[10] = {'\0'};
strcpy(szDriveLetter, sDriveLetter);
TCHAR szUserName[32] = {'\0'};
strcpy(szUserName, sUserName);
TCHAR szPassword[32] = {'\0'};
strcpy(szPassword, sPassword);
TCHAR szRemotePath[MAX_PATH] = {'\0'};
strcpy(szRemotePath, sRemotePath);
char szErr[128] = {0};
bool log = Logon( ".", _T("administrator"), _T("cimar3"), szErr,
sizeof(szErr) );
NETRESOURCE nr;
DWORD res;
//
// Assign values to the NETRESOURCE structure.
//
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = NULL;
nr.lpRemoteName = _T("\\\\192.168.1.67\\DcmImg");
SvcDebugOut("\\\\192.168.1.67\\DcmImg\n");
nr.lpProvider = NULL;
//
// Call the WNetAddConnection2 function to assign a drive letter =
to
the share.
//
res = WNetAddConnection2(&nr, _T("administrator"),_T("cimar3"),
FALSE);
if( (res == NO_ERROR) || (res == ERROR_ALREADY_ASSIGNED) )
{
SvcDebugOut("MapNetworkDrive : WNetAddConnection2 Sucess\=
n");
return TRUE;
}
else
{
CString sErrorMsg;
sErrorMsg.Format("Fail to map %s to %s with UserName=%s=
and Password=
%s. Error code: %ld\n",
szDriveLetter, szRemotePath, szUserName,
szPassword, res);
SvcDebugOut(sErrorMsg);
return FALSE;
}
}
BOOL EnableNetworkDrive(void)
{
CString sErrorMsg;
/// SHAO FAN APR 13 ///
/// Enable Network Drive if in need
CString sAppFolder;
TCHAR szBuffer[MAX_PATH_LEN] = {'\0'};
if (GetModuleFileName(NULL, szBuffer, MAX_PATH_LEN))
{
sAppFolder = szBuffer;
sAppFolder = sAppFolder.Left(sAppFolder.ReverseFind('\\=
') + 1);
}
CString sConnectionString = LoadConnectionString(sAppFolder);
CDatabase db;
try
{
db.OpenEx(sConnectionString, CDatabase::noOdbcDialog);
}
catch(CDBException *e)
{
sErrorMsg.Format("Fail to open database: %s\n", e->m_strE=
rror);
e->Delete();
SvcDebugOut(sErrorMsg);
return FALSE;
}
CString sDriveLetter, sUserName, sPassword, sRemotePath;
CString sQuery;
CNetDrive NetDriveRS(&db);
// Code Modified by R.Alagaraja on 28-12-2006
// Loading queries from String Table
// ***********************************
LoadStringResource(sQuery,IDS_GNL_SEL_NTDRV);
// ***********************************
try
{
NetDriveRS.Open(CRecordset::snapshot, sQuery);
while(!NetDriveRS.IsEOF())
{
sDriveLetter = NetDriveRS.m_sDriveLetter;
sUserName = NetDriveRS.m_sServiceLoginName;
sPassword = NetDriveRS.m_sServiceLoginPassword;
sRemotePath = NetDriveRS.m_sRemotePath;
if( !MapNetworkDrive(sDriveLetter, sUserName, sPa=
ssword,
sRemotePath) )
{
NetDriveRS.Close();
db.Close();
return FALSE;
}
NetDriveRS.MoveNext();
}
NetDriveRS.Close();
}
catch(CDBException *e)
{
db.Close();
sErrorMsg.Format("Fail to retrieve TABLE NetDrive: %s\n",=
e->m_strError);
e->Delete();
SvcDebugOut(sErrorMsg);
return FALSE;
}
return
...
read more =BB- Hide quoted text -
- Show quoted text -
hey joe,
i forgot to send this code.I thought this mite useful enough to help
me out of this quandry..
BOOL EchoServerInit(CString m_ConnectionString, CString m_AppFolder,
CString &m_ImageFolder,
CString &m_TempFileFolder, CString &m_LogFileFolder, CString
&m_DatabaseBackupFolder, CString &m_CacheFolder)
{
///-----------------------------------------------------------------
/// prepare folders for EchoServer
///-----------------------------------------------------------------
BOOL bImageFolderCreated = FALSE;
BOOL bTempFolderCreated = FALSE;
BOOL bLogFolderCreated = FALSE;
BOOL bBackupFolderCreated = FALSE;
BOOL bCacheFolderCreated = FALSE;
CDatabase db;
try
{
db.OpenEx(m_ConnectionString, CDatabase::noOdbcDialog);
}
catch(...)
{
SvcDebugOut(m_ConnectionString+" Fail to connect to database\n");
return FALSE;
}
CServerSetting serverSettingRS(&db);
try
{
// Code Modified by R.Alagaraja on 28-12-2006
// Loading queries from String Table
// ***********************************
CString sQueryString = _T("");
LoadStringResource(sQueryString,IDS_GNL_SEL_SERVSET);
// ***********************************
serverSettingRS.Open(CRecordset::snapshot, sQueryString);
if(serverSettingRS.IsEOF())
{
// Add a new record
CString sDataFolder = _T("C:\\MatrixViewData\\");
if(!PrepareFolder(sDataFolder))
{
serverSettingRS.Close();
db.Close();
return FALSE;
}
CString sAETitle = "MVUServer";
CString sPortNumber = "104";
CString sTimeOut = "10";
CString sMaxClient = "100";
BYTE nSecurityMode = 0;
BOOL bGenerateEventLog = 1;
BOOL bSaveReceivedCS = 0;
BOOL bSaveReceivedDS = 0;
BOOL bSaveSentDS = 0;
// The DICOM images folder
m_ImageFolder = sDataFolder + DEFAULT_IMAGES_FOLDERNAME + "\\";
// The temporary files folder
m_TempFileFolder = sDataFolder + DEFAULT_TEMP_FOLDERNAME + "\\";
// Create the Log file folder
m_LogFileFolder = sDataFolder + DEFAULT_LOGS_FOLDERNAME + "\\";
// Create the Database Backup Folder
m_DatabaseBackupFolder = sDataFolder +
DEFAULT_DATABASE_BACKUP_FOLDER_NAME + "\\";
// Create the Cache Folder
m_CacheFolder = sDataFolder + DEFAULT_CACHE_FOLDERNAME + "\\";
BYTE nMaxLogLevel = 2;
BYTE nCompressType = 1;
BYTE nCompressThread = 2;
BYTE nCompressDelay = 10;
CString sCompressDelay = _T("");
BOOL bDiskFull = 0;
///---------------------------------------------------------------------=
--------------
bImageFolderCreated = PrepareFolder(m_ImageFolder);
bTempFolderCreated = PrepareFolder(m_TempFileFolder);
bLogFolderCreated = PrepareFolder(m_LogFileFolder);
bBackupFolderCreated = PrepareFolder(m_DatabaseBackupFolder);
bCacheFolderCreated = PrepareFolder(m_CacheFolder);
SvcDebugOut(m_ImageFolder+_T("\n"));
SvcDebugOut(m_TempFileFolder+_T("\n"));
SvcDebugOut(m_LogFileFolder+_T("\n"));
SvcDebugOut(m_DatabaseBackupFolder+_T("\n"));
SvcDebugOut(m_CacheFolder+_T("\n"));
if(!(bImageFolderCreated &&
bTempFolderCreated &&
bLogFolderCreated &&
bBackupFolderCreated &&
bCacheFolderCreated))
{
serverSettingRS.Close();
db.Close();
SvcDebugOut("Error creating needed folders\n");
return FALSE;
}
CString sImageFolder = m_ImageFolder;
CString sTempFileFolder = m_TempFileFolder;
CString sLogFileFolder = m_LogFileFolder;
CString sDatabaseBackupFolder = m_DatabaseBackupFolder;
CString sCacheFolder = m_CacheFolder;
#ifdef MYSQL
sImageFolder.Replace(_T("\\"), _T("\\\\"));
sTempFileFolder.Replace(_T("\\"), _T("\\\\"));
sLogFileFolder.Replace(_T("\\"), _T("\\\\"));
sDatabaseBackupFolder.Replace(_T("\\"), _T("\\\\"));
sCacheFolder.Replace(_T("\\"), _T("\\\\"));
#endif
serverSettingRS.Close();
CString sExeQuery;
// Code Modified by R.Alagaraja on 29-12-2006
// Loading queries from String Table
// ***********************************
CString szLoadString = _T("");
LoadStringResource(szLoadString,IDS_GNL_INST_SRVSET);
sExeQuery.Format(szLoadString,
sAETitle, sPortNumber, sTimeOut, sMaxClient,
nSecurityMode, bGenerateEventLog,
bSaveReceivedCS, bSaveReceivedDS, bSaveSentDS,
sImageFolder, sTempFileFolder,
sLogFileFolder,sDatabaseBackupFolder,
nMaxLogLevel, nCompressType, nCompressThread, sCompressDelay,
sCacheFolder);
// ***********************************
db.ExecuteSQL(sExeQuery);
db.Close();
}
else
{
m_ImageFolder = serverSettingRS.m_ImageFolder;
m_TempFileFolder = serverSettingRS.m_TempFileFolder;
m_LogFileFolder = serverSettingRS.m_LogFileFolder;
m_DatabaseBackupFolder = serverSettingRS.m_DatabaseBackupFolder;
m_CacheFolder = serverSettingRS.m_sCacheFolder;
serverSettingRS.Close();
db.Close();
///---------------------------------------------------------------------=
---
bImageFolderCreated = PrepareFolder(m_ImageFolder);
bTempFolderCreated = PrepareFolder(m_TempFileFolder);
bLogFolderCreated = PrepareFolder(m_LogFileFolder);
bBackupFolderCreated = PrepareFolder(m_DatabaseBackupFolder);
bCacheFolderCreated = PrepareFolder(m_CacheFolder);
SvcDebugOut(m_ImageFolder+_T("\n"));
SvcDebugOut(m_TempFileFolder+_T("\n"));
SvcDebugOut(m_LogFileFolder+_T("\n"));
SvcDebugOut(m_DatabaseBackupFolder+_T("\n"));
SvcDebugOut(m_CacheFolder+_T("\n"));
if(!(bImageFolderCreated &&
bTempFolderCreated &&
bLogFolderCreated &&
bBackupFolderCreated &&
bCacheFolderCreated))
{
SvcDebugOut("Error creating needed folders\n");
return FALSE;
}
}
}
catch(...)
{
db.Close();
SvcDebugOut("Error Retrieving TABLE SeverSetting\n");
return FALSE;
}
return TRUE;
}
this is how i prepare folders and stuff....these folders get created
in a folder called C:\matrixviewData in my local computer.....i just
want to map a network drive save all these folders in that network
path...this is my task and i am not able to create folders and i am
jus able to map it....Thanks in advance joe....